C語(yǔ)言學(xué)習(xí)指南:從規(guī)范編程到專業(yè)級(jí)開發(fā)
定 價(jià):149 元
叢書名:華章程序員書庫(kù)
- 作者:[美]杰夫·蘇哈伊(Jeff Szuhay) 著
- 出版時(shí)間:2022/6/1
- ISBN:9787111706021
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁(yè)碼:523
- 紙張:
- 版次:
- 開本:16
本書將C語(yǔ)言中的知識(shí)由淺入深地安排成五個(gè)部分進(jìn)行講解,通過大量簡(jiǎn)明易懂的范例來演示C語(yǔ)言中的概念。第1部分介紹與C語(yǔ)言的語(yǔ)法及程序結(jié)構(gòu)有關(guān)的基礎(chǔ)概念。第2部分介紹C語(yǔ)言的數(shù)據(jù)類型。第3部分講解如何用各種方式分配及釋放內(nèi)存。第4部分介紹與讀取數(shù)據(jù)(輸入數(shù)據(jù))及寫入數(shù)據(jù)(輸出數(shù)據(jù))有關(guān)的各種話題。第5部分詳細(xì)解釋如何創(chuàng)建并管理含有多份文件的程序項(xiàng)目。
譯者序
前言
作者簡(jiǎn)介
審校者簡(jiǎn)介
第一部分 C語(yǔ)言的基礎(chǔ)知識(shí)
第1章 運(yùn)行Hello, World!程序2
1.1 技術(shù)要求2
1.2 編寫第一個(gè)C語(yǔ)言程序3
1.3 了解程序開發(fā)流程4
1.3.1 編輯5
1.3.2 編譯6
1.3.3 運(yùn)行9
1.3.4 驗(yàn)證10
1.3.5 重復(fù)10
1.4 創(chuàng)建、錄入并保存第一個(gè)C語(yǔ)言程序12
1.5 編譯第一個(gè)C語(yǔ)言程序13
1.6 運(yùn)行第一個(gè)C語(yǔ)言程序14
1.7 添加注釋14
1.7.1 怎樣寫好注釋15
1.7.2 給Hello, world!程序添加注釋17
1.8 學(xué)著在代碼上做實(shí)驗(yàn)18
1.9 小結(jié)19
第2章 了解程序的結(jié)構(gòu)21
2.1 技術(shù)要求21
2.2 語(yǔ)句與代碼塊22
2.2.1 在語(yǔ)句與代碼塊中試驗(yàn)各種轉(zhuǎn)義序列23
2.2.2 了解分隔符的用法25
2.2.3 了解空白的用法27
2.2.4 了解C語(yǔ)言的各種語(yǔ)句30
2.3 了解C語(yǔ)言的函數(shù)32
2.4 了解如何定義函數(shù)32
2.4.1 了解函數(shù)的標(biāo)識(shí)符33
2.4.2 了解函數(shù)的語(yǔ)句塊35
2.4.3 了解函數(shù)的返回值35
2.4.4 通過函數(shù)的參數(shù)傳遞數(shù)值37
2.5 執(zhí)行順序42
2.6 了解如何聲明函數(shù)43
2.7 小結(jié)46
第3章 基本的數(shù)據(jù)類型47
3.1 技術(shù)要求47
3.2 了解數(shù)據(jù)類型48
3.3 字節(jié)與數(shù)據(jù)塊51
3.4 如何在C語(yǔ)言代碼中表示整數(shù)52
3.4.1 如何在C語(yǔ)言代碼中表示正整數(shù)與負(fù)整數(shù)53
3.4.2 如何在C語(yǔ)言代碼中采用大小不同的數(shù)據(jù)塊來表示整數(shù)53
3.5 如何在C語(yǔ)言中表示小數(shù)55
3.6 如何在C語(yǔ)言中表示單個(gè)字符55
3.7 如何在C語(yǔ)言中表示布爾值56
3.8 如何在C語(yǔ)言中查詢各種數(shù)據(jù)類型的大小57
3.8.1 sizeof()運(yùn)算符57
3.8.2 各種數(shù)據(jù)類型的取值范圍59
3.9 小結(jié)60
第4章 使用變量并為變量賦值61
4.1 技術(shù)要求62
4.2 選用合適的類型來表示數(shù)據(jù)值62
4.3 學(xué)習(xí)變量的用法62
4.3.1 給變量命名63
4.3.2 顯式地指定變量類型64
4.3.3 顯式地指定變量類型并初始化65
4.4 學(xué)習(xí)常量的用法66
4.4.1 字面常量66
4.4.2 用預(yù)處理指令定義常量值68
4.4.3 顯式地定義某種類型的常量69
4.4.4 給常量命名69
4.5 把類型適當(dāng)?shù)闹蒂x給變量70
4.5.1 通過賦值語(yǔ)句顯式地賦值71
4.5.2 通過給函數(shù)傳遞參數(shù)來賦值71
4.5.3 通過return語(yǔ)句來賦值73
4.6 小結(jié)74
第5章 運(yùn)算符與表達(dá)式75
5.1 技術(shù)要求76
5.2 表達(dá)式與運(yùn)算符76
5.3 在數(shù)字值上執(zhí)行運(yùn)算78
5.4 類型轉(zhuǎn)換83
5.4.1 隱式類型轉(zhuǎn)換83
5.4.2 顯式類型轉(zhuǎn)換87
5.5 字符型數(shù)據(jù)支持的操作88
5.6 邏輯運(yùn)算符與關(guān)系運(yùn)算符89
5.7 位運(yùn)算符92
5.8 條件運(yùn)算符94
5.9 序列運(yùn)算符95
5.10 復(fù)合賦值運(yùn)算符96
5.11 在一條表達(dá)式中給多個(gè)變量賦值97
5.12 增量運(yùn)算符97
5.13 運(yùn)算符之間的優(yōu)先次序以及括號(hào)的用法99
5.14 小結(jié)100
第6章 用條件語(yǔ)句控制程序流102
6.1 技術(shù)要求103
6.2 了解各種條件表達(dá)式103
6.3 if() ... else ...語(yǔ)句104
6.4 switch() ...語(yǔ)句107
6.5 多個(gè)if() ... else ...語(yǔ)句111
6.6 嵌套的if() ... else ...語(yǔ)句114
6.7 小結(jié)117
第7章 循環(huán)與迭代119
7.1 技術(shù)要求119
7.2 重復(fù)執(zhí)行代碼120
7.3 蠻力法實(shí)現(xiàn)重復(fù)執(zhí)行代碼122
7.4 while () ...循環(huán)語(yǔ)句124
7.5 for() ...循環(huán)語(yǔ)句127
7.6 do ... while()循環(huán)語(yǔ)句129
7.7 如何把一種循環(huán)改寫成另一種循環(huán)131
7.8 善用goto語(yǔ)句以實(shí)現(xiàn)無條件跳轉(zhuǎn)132
7.9 用break與continue語(yǔ)句來控制循環(huán)136
7.10 無限循環(huán)139
7.11 小結(jié)140
第8章 創(chuàng)建并使用枚舉值141
8.1 技術(shù)要求141
8.2 枚舉值142
8.2.1 定義枚舉類型與枚舉值143
8.2.2 使用枚舉值145
8.3 用switch()...語(yǔ)句判斷枚舉變量的取值148
8.4 小結(jié)152
第二部分 復(fù)雜的數(shù)據(jù)類型
第9章 創(chuàng)建并使用結(jié)構(gòu)體154
9.1 技術(shù)要求155
9.2 結(jié)構(gòu)體155
9.2.1 聲明結(jié)構(gòu)體156
9.2.2 初始化結(jié)構(gòu)體并訪問其中的字段160
9.3 用函數(shù)操作結(jié)構(gòu)體161
9.4 包含其他結(jié)構(gòu)體的結(jié)構(gòu)體163
9.4.1 用函數(shù)初始化結(jié)構(gòu)體165
9.4.2 復(fù)用某個(gè)函數(shù)以打印大結(jié)構(gòu)體中的多個(gè)小結(jié)構(gòu)體166
9.5 從結(jié)構(gòu)體入手理解面向?qū)ο缶幊?69
9.6 小結(jié)170
第10章 用typedef創(chuàng)建自定義數(shù)據(jù)類型171
10.1 技術(shù)要求171
10.2 用typedef給固有類型起別名172
10.3 用typedef簡(jiǎn)化枚舉類型的用法174
10.4 用typedef簡(jiǎn)化結(jié)構(gòu)體類型的用法176
10.5 typedef的其他用法179
10.6 幾個(gè)有用的編譯器選項(xiàng)179
10.7 把自定義類型及typedef說明符放在頭文件中180
10.8 小結(jié)183
第11章 數(shù)組185
11.1 技術(shù)要求185
11.2 聲明并初始化數(shù)組186
11.3 訪問數(shù)組中的元素189
11.4 通過循環(huán)來操作數(shù)組192
11.5 使用函數(shù)來操作數(shù)組193
11.6 小結(jié)196
第12章 多維數(shù)組198
12.1 技術(shù)要求198
12.2 從一維數(shù)組到多維數(shù)組199
12.2.1 重新審視一維數(shù)組199
12.2.2 由一維數(shù)組來理解二維數(shù)組200
12.2.3 由二維數(shù)組來理解三維數(shù)組201
12.2.4 理解N維數(shù)組203
12.3 聲明并初始化多維數(shù)組203
12.3.1 聲明二維數(shù)組204
12.3.2 初始化二維數(shù)組204
12.3.3 聲明三維數(shù)組204
12.3.4 初始化三維數(shù)組205
12.3.5 聲明并初始化N維數(shù)組205
12.4 訪問多維數(shù)組中的元素206
12.5 用多層循環(huán)操作多維數(shù)組207
12.5.1 用二層的嵌套循環(huán)遍歷二維數(shù)組208
12.5.2 用三層的嵌套循環(huán)遍歷三維數(shù)組208
12.6 在函數(shù)中使用多維數(shù)組209
12.7 小結(jié)212
第13章 指針213
13.1 技術(shù)要求214
13.2 C語(yǔ)言中的難點(diǎn):指針214
13.3 指針的基礎(chǔ)知識(shí)215
13.3.1 直接尋址與間接尋址216
13.3.2 內(nèi)存與內(nèi)存尋址216
13.3.3 管理并訪問內(nèi)存217
13.3.4 用現(xiàn)實(shí)示例來類比指針218
13.4 指針型變量的聲明、命名及賦值220
13.4.1 聲明指針型變量220
13.4.2 命名指針型變量221
13.4.3 給指針賦值(讓指針指向某個(gè)地址)222
13.5 與指針有關(guān)的操作222
13.5.1 給指針賦值222
13.5.2 NULL指針與void*指針223
13.5.3 訪問指針的目標(biāo)225
13.5.4 指針?biāo)阈g(shù)228
13.5.5 比較指針228
13.6 表述指針的操作230
13.7 可變函數(shù)參數(shù)231
13.7.1 按引用傳遞233
13.7.2 直接把地址傳給函數(shù),而不通過指針變量235
13.7.3 指向指針的指針236
13.8 指向結(jié)構(gòu)體的指針238
13.8.1 通過指針訪問結(jié)構(gòu)體及其字段239
13.8.2 在函數(shù)中使用指向結(jié)構(gòu)體的指針239
13.9 小結(jié)241
第14章 數(shù)組與指針242
14.1 技術(shù)要求242
14.2 數(shù)組名稱與指針之間的關(guān)系242
14.3 數(shù)組元素與指針之間的關(guān)系245
14.4 通過指針操作數(shù)組246
14.4.1 在指針上執(zhí)行算術(shù)運(yùn)算246
14.4.2 對(duì)指針使用自增運(yùn)算符247
14.4.3 將數(shù)組作為重新訪問的函數(shù)指針傳遞250
14.4.4 數(shù)組名稱與指向該數(shù)組的指針有時(shí)可以互換251
14.5 指向數(shù)組的指針數(shù)組253
14.6 小結(jié)259
第15章 字符串260
15.1 技術(shù)要求261
15.2 字符串的基本單元:字符261
15.2.1 char類型與ASCII字符集262
15.2.2 比ASCII更大的字符集:UTF-8及Unicode265
15.2.3 字符支持的操作266
15.2.4 判斷字符是否具備某項(xiàng)特征268
15.2.5 操作字符270
15.3 C語(yǔ)言字符串275
15.3.1 帶有終結(jié)符的字符數(shù)組275
15.3.2 C語(yǔ)言字符串的優(yōu)點(diǎn)276
15.3.3 C語(yǔ)言字符串的缺點(diǎn)276
15.4 聲明并初始化字符串277
15.4.1 聲明字符串277
15.4.2 初始化字符串278
15.4.3 把字符串傳給函數(shù)280
15.4.4 空白字符串與空字符串281
15.4.5 重新審視Hello, World!程序282
15.5 創(chuàng)建并使用字符串?dāng)?shù)組283
15.6 用標(biāo)準(zhǔn)庫(kù)中的函數(shù)執(zhí)行常見的字符串操作288
15.6.1 常用的字符串函數(shù)288
15.6.2 更安全的字符串函數(shù)289
15.7 小結(jié)291
第16章 創(chuàng)建并使用復(fù)雜的結(jié)構(gòu)體293
16.1 技術(shù)要求294
16.2 為什么需要復(fù)雜的結(jié)構(gòu)體294
16.3 重新審視card4.c295
16.4 理解結(jié)構(gòu)體數(shù)組302
16.4.1 創(chuàng)建結(jié)構(gòu)體數(shù)組302
16.4.2 訪問數(shù)組中的結(jié)構(gòu)體元素303
16.4.3 操作結(jié)構(gòu)體數(shù)組305
16.5 包含小結(jié)構(gòu)體的大結(jié)構(gòu)體310
16.5.1 創(chuàng)建包含小結(jié)構(gòu)體的大結(jié)構(gòu)體310
16.5.2 訪問大結(jié)構(gòu)體中的小結(jié)構(gòu)體所具備的字段311
16.5.3 操作包含小結(jié)構(gòu)體的大結(jié)構(gòu)體312
16.6 使用含有數(shù)組的結(jié)構(gòu)體319
16.6.1 了解隨機(jī)與隨機(jī)數(shù)生成器319
16.6.2 創(chuàng)建含有數(shù)組的結(jié)構(gòu)體320
16.6.3 訪問結(jié)構(gòu)體所含數(shù)組中的元素321
16.6.4 操作結(jié)構(gòu)體所含數(shù)組中的元素321
16.7 使用含有結(jié)構(gòu)體數(shù)組的大結(jié)構(gòu)體324
16.7.1 創(chuàng)建包含結(jié)構(gòu)體數(shù)組的大結(jié)構(gòu)體325
16.7.2 訪問大結(jié)構(gòu)體中的結(jié)構(gòu)體數(shù)組內(nèi)的各個(gè)小結(jié)構(gòu)體325
16.7.3 操作包含結(jié)構(gòu)體數(shù)組的大結(jié)構(gòu)體326
16.7.4 寫出最終版的carddeck.c文件327
16.8 小結(jié)333
第三部分 內(nèi)存分配
第17章 理解內(nèi)存分配與生命期336
17.1 技術(shù)要求336
17.2 定義C語(yǔ)言中的各種存儲(chǔ)類337
17.3 固定存儲(chǔ)類(主要是其中的自動(dòng)存儲(chǔ)類)與動(dòng)態(tài)存儲(chǔ)類337
17.3.1 固定存儲(chǔ)類(主要是其中的自動(dòng)存儲(chǔ)類)338
17.3.2 動(dòng)態(tài)存儲(chǔ)類338
17.4 內(nèi)部存儲(chǔ)類與外部存儲(chǔ)類338
17.4.1 內(nèi)部(或局部)存儲(chǔ)類339
17.4.2 外部(或全局)存儲(chǔ)類340
17.4.3 自動(dòng)變量(即存儲(chǔ)類為auto的變量)所具備的生命期341
17.5 理解靜態(tài)變量(即存儲(chǔ)類為static的變量)341
17.5.1 函數(shù)內(nèi)的靜態(tài)變量341
17.5.2 函數(shù)外的靜態(tài)變量343
17.5.3 靜態(tài)變量的生命期344
17.6 小結(jié)344
第18章 動(dòng)態(tài)內(nèi)存分配345
18.1 技術(shù)要求345
18.2 了解動(dòng)態(tài)內(nèi)存346
18.3 分配并釋放動(dòng)態(tài)內(nèi)存347
18.3.1 分配動(dòng)態(tài)內(nèi)存348
18.3.2 釋放動(dòng)態(tài)內(nèi)存349
18.3.3 訪問動(dòng)態(tài)內(nèi)存350
18.3.4 動(dòng)態(tài)內(nèi)存的生命期350
18.4 與動(dòng)態(tài)內(nèi)存分配有關(guān)的注意事項(xiàng)351
18.5 一種動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu):鏈表354
18.5.1 定義鏈表所需的各種結(jié)構(gòu)體354
18.5.2 聲明鏈表支持的操作355
18.5.3 更復(fù)雜的鏈表操作364
18.5.4 編寫測(cè)試程序以驗(yàn)證鏈表實(shí)現(xiàn)得是否正確365
18.6 其他動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)369
18.7 小結(jié)370
第四部分 輸入與輸出
第19章 學(xué)習(xí)各種輸出格式372
19.1 技術(shù)要求373
19.2 重新審視printf()函數(shù)373
19.3 用格式說明符調(diào)整無符號(hào)整數(shù)的格式375
19.3.1 在各種進(jìn)制下解讀無符號(hào)整數(shù)375
19.3.2 把負(fù)數(shù)當(dāng)成無符號(hào)整數(shù)來顯示376
19.3.3 用各種進(jìn)制表示2與9的整數(shù)次方377
19.3.4 打印指針的值377
19.4 用格式說明符調(diào)整帶符號(hào)整數(shù)的格式379
19.4.1 使用字段寬度、精度、對(duì)齊方式與填充方式來顯示帶符號(hào)整數(shù)379
19.4.2 針對(duì)長(zhǎng)長(zhǎng)整數(shù)指定格式說明符380
19.4.3 用各種修飾符調(diào)整2與9的整數(shù)次方的顯示效果380
19.5 用格式說明符調(diào)整浮點(diǎn)數(shù)的格式381
19.5.1 使用字段寬度、精度、對(duì)齊方式與填充方式來顯示浮點(diǎn)數(shù)382
19.5.2 用十六進(jìn)制顯示浮點(diǎn)數(shù)383
19.5.3 用最合適的字段寬度顯示浮點(diǎn)數(shù)383
19.6 用格式說明符調(diào)整字符串與字符的格式385
19.6.1 使用字段寬度、精度、對(duì)齊方式與填充方式來顯示字符串385
19.6.2 輸出子字符串386
19.6.3 調(diào)整單個(gè)字符的輸出格式386
19.7 小結(jié)387
第20章 從命令行界面獲取輸入信息388
20.1 技術(shù)要求388
20.2 重新審視main()函數(shù)388
20.2.1 main()函數(shù)的特別之處389
20.2.2 main()函數(shù)的兩種形式389
20.3 使用argc與argv參數(shù)390
20.3.1 演示argc與argv的簡(jiǎn)單用法390
20.3.2 命令行選項(xiàng)與命令行處理器392
20.4 小結(jié)395
第21章 調(diào)整輸入值的格式397
21.1 技術(shù)要求398
21.2 流簡(jiǎn)介398
21.2.1 理解標(biāo)準(zhǔn)輸出流400
21.2.2 理解標(biāo)準(zhǔn)輸入流402
21.2.3 通過printf()與fprintf()重新審視控制臺(tái)輸出402
21.2.4 通過scanf()函數(shù)探索控制臺(tái)輸入403
21.3 用scanf()函數(shù)讀取格式化的輸入數(shù)據(jù)404
21.3.1 用scanf()函數(shù)讀取用戶輸入的數(shù)字值404
21.3.2 用scanf()函數(shù)讀取用戶輸入的字符串與字符408
21.3.3 用scan set限定用戶輸入的字符411
21.3.4 控制scanf()處理輸入數(shù)據(jù)時(shí)所用的字段寬度413
21.4 通過字符串緩沖區(qū)轉(zhuǎn)換數(shù)據(jù)416
21.4.1 通過sprintf()與sscanf()在值與字符串之間轉(zhuǎn)換417
21.4.2 用atoi()與atod()將字符串轉(zhuǎn)換成數(shù)字418
21.5 無格式的輸入與輸出419
21.5.1 從控制臺(tái)輸入字符串或把字符串輸出到控制臺(tái)419
21.5.2 通過gets()函數(shù)獲取簡(jiǎn)單的輸入字符串并通過puts()函數(shù)顯示簡(jiǎn)單的輸出字符串420
21.5.3 用fgets()與fputs()獲取一系列名稱并輸出排序后的名單421
21.6 小結(jié)425
第22章 文件427
22.1 技術(shù)要求428
22.2 文件的基本概念428
22.2.1 重新審視文件流428
22.2.2 FILE流的各項(xiàng)屬性429
22.2.3 開啟和關(guān)閉文件430
22.2.4 了解每種數(shù)據(jù)流所支持的文件操作431
22.3 文件系統(tǒng)的基礎(chǔ)知識(shí)432
22.4 打開文件以讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)434
22.4.1 在程序中獲取用戶輸入的文件名436
22.4.2 獲取用戶通過命令行參數(shù)傳入的文件名438
22.5 小結(jié)439
第23章 文件輸入和文件輸出440
23.1 技術(shù)要求440
23.2 處理文件441
23.3 創(chuàng)建一個(gè)未排序名稱的文件446
23.3.1 從fgets()獲取到的輸入字符串中移除首尾的空白字符447
23.3.2 讀取名稱和寫入名稱448
23.4 讀取未排序的人名并輸出排序后的名單452
23.4.1 用鏈表給人名排序454
23.4.2 將排序后的名單寫入輸出端458
23.5 小結(jié)460
第五部分 開發(fā)大型程序
第24章 開發(fā)多文件的程序464
24.1 技術(shù)要求465
24.2 理解多文件的程序465
24.3 把聲明寫在頭文件中,把定義寫在源文件中466
24.3.1 創(chuàng)建源文件466
24.3.2 創(chuàng)建頭文件467
24.4 重新審視預(yù)處理器469
24.4.1 了解預(yù)處理器的局限與風(fēng)險(xiǎn)469
24.4.2 如何有效地使用預(yù)處理器470
24.4.3 利用預(yù)處理器來調(diào)試程序471
24.5 創(chuàng)建多文件的程序474
24.5.1 把Card結(jié)構(gòu)體與相關(guān)函數(shù)提取到相應(yīng)的文件中475
24.5.2 把Hand結(jié)構(gòu)體與相關(guān)函數(shù)提取到相應(yīng)的文件中477
24.5.3 把Deck結(jié)構(gòu)體與相關(guān)函數(shù)提取到相應(yīng)的文件中479
24.5.4 完成整個(gè)dealer程序480
24.6 構(gòu)建多文件的程序482
24.7 小結(jié)484
第25章 作用域485
25.1 技術(shù)要求486
25.2 從可見范圍、存在范圍及鏈接范圍三方面來定義作用域486
25.2.1 可見范圍486
25.2.2 存在范圍487
25.2.3 鏈接范圍488
25.2.4 綜合考慮可見范圍、存在范圍與鏈接范圍489
25.3 變量的作用域490
25.3.1 語(yǔ)句塊級(jí)別的變量的作用域490
25.3.2 函數(shù)參數(shù)列表中的變量的作用域493
25.3.3 文件級(jí)別的變量的作用域493
25.3.4 全局變量494
25.4 函數(shù)的作用域495
25.4.1 作用域與信息隱藏495
25.4.2 用static關(guān)鍵字修飾函數(shù)496
25.5 小結(jié)500
25.6 結(jié)束語(yǔ)501
附錄
附錄A C語(yǔ)言的規(guī)范與關(guān)鍵字506
附錄B 運(yùn)算符優(yōu)先級(jí)表格508
附錄C GCC與Clang編譯器的常用選項(xiàng)510
附錄D ASCII字符集511
附錄E 一個(gè)更好的字符串庫(kù):Bstrlib512
附錄F Unicode與UTF-8517
附錄G C語(yǔ)言標(biāo)準(zhǔn)庫(kù)520