《C和指針》提供與C語(yǔ)言編程相關(guān)的全面資源和深入討論。本書(shū)通過(guò)對(duì)指針的基礎(chǔ)知識(shí)和高級(jí)特性的探討,幫助程序員把指針的強(qiáng)大功能融入到自己的程序中去。
全書(shū)共18章,覆蓋了數(shù)據(jù)、語(yǔ)句、操作符和表達(dá)式、指針、函數(shù)、數(shù)組、字符串、結(jié)構(gòu)和聯(lián)合等幾乎所有重要的C編程話題。書(shū)中給出了很多編程技巧和提示,每章后面有針對(duì)性很強(qiáng)的練習(xí),附錄部分則給出了部分練習(xí)的解答。
《C和指針》適合C語(yǔ)言初學(xué)者和初級(jí)C程序員閱讀,也可作為計(jì)算機(jī)專(zhuān)業(yè)學(xué)生學(xué)習(xí)C語(yǔ)言的參考。
1.C指針經(jīng)典之作2020最新版,全球暢銷(xiāo)30余年,影響了國(guó)內(nèi)外好幾代程序員的C語(yǔ)言圣經(jīng)級(jí)作品,中文版累計(jì)銷(xiāo)售14w+冊(cè);
2.此書(shū)獲得了ACUU的高度評(píng)價(jià),ACCU主席Francis Glassborow傾力推薦;
3.本書(shū)凸現(xiàn)指針對(duì)C的重要性,提供寶貴的提示和智慧的警告,向大家展示指針在C程序中的巨大威力;
4.本書(shū)提供與C語(yǔ)言編程相關(guān)的全面資源和深入討論,通過(guò)對(duì)指針的基礎(chǔ)知識(shí)和高級(jí)特性的探討,幫助程序員把指針的強(qiáng)大功能融入到自己的程序中去。
本書(shū)是為水平較高的C程序員和學(xué)生量身打造的,為那些需要深入理解C編程語(yǔ)言的人提供了以全面詳盡的資源。本書(shū)對(duì)指針的基礎(chǔ)知識(shí)和高級(jí)特性進(jìn)行了全面且深入的講解與探索,確保C程序員能夠?qū)⒅羔樀膹?qiáng)大功能融入到他們的C程序中。本書(shū)內(nèi)容覆蓋全面,對(duì)C編程慣用法進(jìn)行了詳細(xì)解釋?zhuān)對(duì)C指針的一些高級(jí)主題進(jìn)行了深入討論,對(duì)于高水平的學(xué)生和C程序員來(lái)說(shuō),本書(shū)是相當(dāng)有價(jià)值的教程和參考資料。
本書(shū)內(nèi)容:
提供了完整的背景信息,以方便讀者全面理解C語(yǔ)言;
全面介紹了指針的內(nèi)容,包括語(yǔ)法、有效使用指針的藝術(shù),以及指針的常見(jiàn)編程慣用法;
對(duì)實(shí)現(xiàn)通用抽象數(shù)據(jù)結(jié)構(gòu)的不同方法進(jìn)行了比較;
使用簡(jiǎn)單、熟悉的寫(xiě)作風(fēng)格來(lái)清楚解釋難度較大的主題,并使用大量的插圖和圖表將復(fù)雜的概念進(jìn)行可視化;
討論了編程技巧、效率、可移植性和軟件工程等問(wèn)題,并利用“警告”的方式對(duì)一些常見(jiàn)的編程陷阱進(jìn)行了標(biāo)注;
介紹了C標(biāo)準(zhǔn)庫(kù)中的每一個(gè)函數(shù)。
Kenneth Reek是美國(guó)Rochester工業(yè)學(xué)院計(jì)算機(jī)系教授,有幾十年年的C編程教學(xué)經(jīng)驗(yàn),并憑借《C和指針》一書(shū)獲得了ACUU的高度評(píng)價(jià)。
第 1章 快速上手 1
1.1 簡(jiǎn)介 1
1.1.1 空白和注釋 4
1.1.2 預(yù)處理指令 4
1.1.3 main函數(shù) 5
1.1.4 read_column_numbers函數(shù) 8
1.1.5 rearrange函數(shù) 12
1.2 補(bǔ)充說(shuō)明 14
1.3 編譯 14
1.4 總結(jié) 15
1.5 警告的總結(jié) 15
1.6 編程提示的總結(jié) 15
1.7 問(wèn)題 16
1.8 編程練習(xí) 16
第 2章 基本概念 19
2.1 環(huán)境 19
2.1.1 翻譯 19
2.1.2 執(zhí)行 21
2.2 詞法規(guī)則 21
2.2.1 字符 22
2.2.2 注釋 23
2.2.3 自由形式的源代碼 23
2.2.4 標(biāo)識(shí)符 24
2.2.5 程序的形式 24
2.3 程序風(fēng)格 25
2.4 總結(jié) 26
2.5 警告的總結(jié) 26
2.6 編程提示的總結(jié) 26
2.7 問(wèn)題 27
2.8 編程練習(xí) 28
第3章 數(shù)據(jù) 29
3.1 基本數(shù)據(jù)類(lèi)型 29
3.1.1 整型家族 29
3.1.2 浮點(diǎn)類(lèi)型 32
3.1.3 指針 33
3.2 基本聲明 35
3.2.1 初始化 35
3.2.2 聲明簡(jiǎn)單數(shù)組 36
3.2.3 聲明指針 36
3.2.4 隱式聲明 37
3.3 typedef 38
3.4 常量 38
3.5 作用域 39
3.5.1 代碼塊作用域 40
3.5.2 文件作用域 41
3.5.3 原型作用域 41
3.5.4 函數(shù)作用域 41
3.6 鏈接屬性 41
3.7 存儲(chǔ)類(lèi)型 43
3.8 static關(guān)鍵字 44
3.9 作用域、存儲(chǔ)類(lèi)型示例 45
3.10 總結(jié) 46
3.11 警告的總結(jié) 47
3.12 編程提示的總結(jié) 47
3.13 問(wèn)題 48
第4章 語(yǔ)句 51
4.1 空語(yǔ)句 51
4.2 表達(dá)式語(yǔ)句 51
4.3 代碼塊 52
4.4 if語(yǔ)句 52
4.5 while語(yǔ)句 53
4.5.1 break和continue語(yǔ)句 54
4.5.2 while語(yǔ)句的執(zhí)行過(guò)程 54
4.6 for語(yǔ)句 55
4.7 do語(yǔ)句 56
4.8 switch語(yǔ)句 57
4.8.1 switch中的break語(yǔ)句 58
4.8.2 default子句 59
4.8.3 switch語(yǔ)句的執(zhí)行過(guò)程 59
4.9 goto語(yǔ)句 60
4.10 總結(jié) 61
4.11 警告的總結(jié) 62
4.12 編程提示的總結(jié) 62
4.13 問(wèn)題 62
4.14 編程練習(xí) 63
第5章 操作符和表達(dá)式 67
5.1 操作符 67
5.1.1 算術(shù)操作符 67
5.1.2 移位操作符 67
5.1.3 位操作符 69
5.1.4 賦值操作符 70
5.1.5 單目操作符 72
5.1.6 關(guān)系操作符 73
5.1.7 邏輯操作符 74
5.1.8 條件操作符 75
5.1.9 逗號(hào)操作符 76
5.1.10 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員 77
5.2 布爾值 78
5.3 左值和右值 79
5.4 表達(dá)式求值 80
5.4.1 隱式類(lèi)型轉(zhuǎn)換 80
5.4.2 算術(shù)轉(zhuǎn)換 80
5.4.3 操作符的屬性 81
5.4.4 優(yōu)先級(jí)和求值的順序 82
5.5 總結(jié) 85
5.6 警告的總結(jié) 86
5.7 編程提示的總結(jié) 86
5.8 問(wèn)題 86
5.9 編程練習(xí) 88
第6章 指針 91
6.1 內(nèi)存和地址 91
6.2 值和類(lèi)型 92
6.3 指針變量的內(nèi)容 93
6.4 間接訪問(wèn)操作符 94
6.5 未初始化和非法的指針 95
6.6 NULL指針 96
6.7 指針、間接訪問(wèn)和左值 97
6.8 指針、間接訪問(wèn)和變量 97
6.9 指針常量 98
6.10 指針的指針 98
6.11 指針表達(dá)式 99
6.12 實(shí)例 104
6.13 指針運(yùn)算 107
6.13.1 算術(shù)運(yùn)算 108
6.13.2 關(guān)系運(yùn)算 110
6.14 總結(jié) 111
6.15 警告的總結(jié) 112
6.16 編程提示的總結(jié) 112
6.17 問(wèn)題 112
6.18 編程練習(xí) 115
第7章 函數(shù) 117
7.1 函數(shù)定義 117
7.2 函數(shù)聲明 119
7.2.1 原型 119
7.2.2 函數(shù)的缺省認(rèn)定 121
7.3 函數(shù)的參數(shù) 122
7.4 ADT和黑盒 124
7.5 遞歸 127
7.5.1 追蹤遞歸函數(shù) 128
7.5.2 遞歸與迭代 131
7.6 可變參數(shù)列表 134
7.6.1 stdarg宏 135
7.6.2 可變參數(shù)的限制 135
7.7 總結(jié) 136
7.8 警告的總結(jié) 137
7.9 編程提示的總結(jié) 137
7.10 問(wèn)題 138
7.11 編程練習(xí) 138
第8章 數(shù)組 141
8.1 一維數(shù)組 141
8.1.1 數(shù)組名 141
8.1.2 下標(biāo)引用 142
8.1.3 指針與下標(biāo) 144
8.1.4 指針的效率 145
8.1.5 數(shù)組和指針 150
8.1.6 作為函數(shù)參數(shù)的數(shù)組名 150
8.1.7 聲明數(shù)組參數(shù) 152
8.1.8 初始化 152
8.1.9 不完整的初始化 153
8.1.10 自動(dòng)計(jì)算數(shù)組長(zhǎng)度 153
8.1.11 字符數(shù)組的初始化 153
8.2 多維數(shù)組 154
8.2.1 存儲(chǔ)順序 154
8.2.2 數(shù)組名 155
8.2.3 下標(biāo) 156
8.2.4 指向數(shù)組的指針 158
8.2.5 作為函數(shù)參數(shù)的多維數(shù)組 159
8.2.6 初始化 160
8.2.7 數(shù)組長(zhǎng)度自動(dòng)計(jì)算 162
8.3 指針數(shù)組 162
8.4 總結(jié) 165
8.5 警告的總結(jié) 166
8.6 編程提示的總結(jié) 166
8.7 問(wèn)題 166
8.8 編程練習(xí) 170
第9章 字符串、字符和字節(jié) 175
9.1 字符串基礎(chǔ) 175
9.2 字符串長(zhǎng)度 175
9.3 不受限制的字符串函數(shù) 177
9.3.1 復(fù)制字符串 177
9.3.2 連接字符串 178
9.3.3 函數(shù)的返回值 178
9.3.4 字符串比較 178
9.4 長(zhǎng)度受限的字符串函數(shù) 179
9.5 字符串查找基礎(chǔ) 180
9.5.1 查找一個(gè)字符 180
9.5.2 查找任何幾個(gè)字符 181
9.5.3 查找一個(gè)子串 181
9.6 高級(jí)字符串查找 182
9.6.1 查找一個(gè)字符串前綴 182
9.6.2 查找標(biāo)記 182
9.7 錯(cuò)誤信息 183
9.8 字符操作 184
9.8.1 字符分類(lèi) 184
9.8.2 字符轉(zhuǎn)換 184
9.9 內(nèi)存操作 185
9.10 總結(jié) 186
9.11 警告的總結(jié) 187
9.12 編程提示的總結(jié) 187
9.13 問(wèn)題 187
9.14 編程練習(xí) 188
第 10章 結(jié)構(gòu)和聯(lián)合 195
10.1 結(jié)構(gòu)基礎(chǔ)知識(shí) 195
10.1.1 結(jié)構(gòu)聲明 195
10.1.2 結(jié)構(gòu)成員 197
10.1.3 結(jié)構(gòu)成員的直接訪問(wèn) 197
10.1.4 結(jié)構(gòu)成員的間接訪問(wèn) 198
10.1.5 結(jié)構(gòu)的自引用 198
10.1.6 不完整的聲明 199
10.1.7 結(jié)構(gòu)的初始化 199
10.2 結(jié)構(gòu)、指針和成員 200
10.2.1 訪問(wèn)指針 201
10.2.2 訪問(wèn)結(jié)構(gòu) 201
10.2.3 訪問(wèn)結(jié)構(gòu)成員 202
10.2.4 訪問(wèn)嵌套的結(jié)構(gòu) 203
10.2.5 訪問(wèn)指針成員 204
10.3 結(jié)構(gòu)的存儲(chǔ)分配 205
10.4 作為函數(shù)參數(shù)的結(jié)構(gòu) 206
10.5 位段 209
10.6 聯(lián)合 211
10.6.1 變體記錄 212
10.6.2 聯(lián)合的初始化 213
10.7 總結(jié) 214
10.8 警告的總結(jié) 214
10.9 編程提示的總結(jié) 214
10.10 問(wèn)題 215
10.11 編程練習(xí) 217
第 11章 動(dòng)態(tài)內(nèi)存分配 221
11.1 為什么使用動(dòng)態(tài)內(nèi)存分配 221
11.2 malloc和free 221
11.3 calloc和realloc 222
11.4 使用動(dòng)態(tài)分配的內(nèi)存 223
11.5 常見(jiàn)的動(dòng)態(tài)內(nèi)存錯(cuò)誤 223
11.6 內(nèi)存分配實(shí)例 226
11.7 總結(jié) 231
11.8 警告的總結(jié) 232
11.9 編程提示的總結(jié) 232
11.10 問(wèn)題 232
11.11 編程練習(xí) 233
第 12章 使用結(jié)構(gòu)和指針 235
12.1 鏈表 235
12.2 單鏈表 235
12.2.1 在單鏈表中插入 236
12.2.2 其他鏈表操作 245
12.3 雙鏈表 245
12.3.1 在雙鏈表中插入 246
12.3.2 其他鏈表操作 253
12.4 總結(jié) 253
12.5 警告的總結(jié) 254
12.6 編程提示的總結(jié) 254
12.7 問(wèn)題 254
12.8 編程練習(xí) 255
第 13章 高級(jí)指針話題 257
13.1 進(jìn)一步探討指向指針的指針 257
13.2 高級(jí)聲明 258
13.3 函數(shù)指針 260
13.3.1 回調(diào)函數(shù) 261
13.3.2 轉(zhuǎn)移表 263
13.4 命令行參數(shù) 265
13.4.1 傳遞命令行參數(shù) 265
13.4.2 處理命令行參數(shù) 266
13.5 字符串常量 269
13.6 總結(jié) 271
13.7 警告的總結(jié) 272
13.8 編程提示的總結(jié) 272
13.9 問(wèn)題 272
13.10 編程練習(xí) 275
第 14章 預(yù)處理器 279
14.1 預(yù)定義符號(hào) 279
14.2 #define 279
14.2.1 宏 281
14.2.2 #define替換 282
14.2.3 宏與函數(shù) 283
14.2.4 帶副作用的宏參數(shù) 284
14.2.5 命名約定 285
14.2.6 #undef 285
14.2.7 命令行定義 285
14.3 條件編譯 286
14.3.1 是否被定義 287
14.3.2 嵌套指令 288
14.4 文件包含 288
14.4.1 函數(shù)庫(kù)文件包含 289
14.4.2 本地文件包含 289
14.4.3 嵌套文件包含 290
14.5 其他指令 291
14.6 總結(jié) 292
14.7 警告的總結(jié) 293
14.8 編程提示的總結(jié) 293
14.9 問(wèn)題 293
14.10 編程練習(xí) 295
第 15章 輸入/輸出函數(shù) 297
15.1 錯(cuò)誤報(bào)告 297
15.2 終止執(zhí)行 298
15.3 標(biāo)準(zhǔn)I/O函數(shù)庫(kù) 298
15.4 ANSI I/O概念 299
15.4.1 流 299
15.4.2 文件 300
15.4.3 標(biāo)準(zhǔn)I/O常量 300
15.5 流I/O總覽 301
15.6 打開(kāi)流 302
15.7 關(guān)閉流 303
15.8 字符I/O 304
15.8.1 字符I/O宏 305
15.8.2 撤銷(xiāo)字符I/O 305
15.9 未格式化的行I/O 306
15.10 格式化的行I/O 308
15.10.1 scanf家族 308
15.10.2 scanf格式代碼 308
15.10.3 printf家族 312
15.10.4 printf格式代碼 312
15.11 二進(jìn)制I/O 316
15.12 刷新和定位函數(shù) 316
15.13 改變緩沖方式 318
15.14 流錯(cuò)誤函數(shù) 319
15.15 臨時(shí)文件 319
15.16 文件操縱函數(shù) 319
15.17 總結(jié) 320
15.18 警告的總結(jié) 321
15.19 編程提示的總結(jié) 322
15.20 問(wèn)題 322
15.21 編程練習(xí) 323
第 16章 標(biāo)準(zhǔn)函數(shù)庫(kù) 327
16.1 整型函數(shù) 327
16.1.1 算術(shù)
327
16.1.2 隨機(jī)數(shù) 328
16.1.3 字符串轉(zhuǎn)換 329
16.2 浮點(diǎn)型函數(shù) 329
16.2.1 三角函數(shù) 330
16.2.2 雙曲函數(shù) 330
16.2.3 對(duì)數(shù)和指數(shù)函數(shù) 330
16.2.4 浮點(diǎn)表示形式 331
16.2.5 冪 331
16.2.6 底數(shù)、頂數(shù)、絕對(duì)值和余數(shù) 331
16.2.7 字符串轉(zhuǎn)換 332
16.3 日期和時(shí)間函數(shù) 332
16.3.1 處理器時(shí)間 332
16.3.2 當(dāng)天時(shí)間 332
16.3.3 日期和時(shí)間的轉(zhuǎn)換 333
16.4 非本地跳轉(zhuǎn) 335
16.4.1 實(shí)例 336
16.4.2 何時(shí)使用非本地跳轉(zhuǎn) 337
16.5 信號(hào) 338
16.5.1 信號(hào)名 338
16.5.2 處理信號(hào) 339
16.5.3 信號(hào)處理函數(shù) 340
16.6 打印可變參數(shù)列表 341
16.7 執(zhí)行環(huán)境 342
16.7.1 終止執(zhí)行 342
16.7.2 斷言 342
16.7.3 環(huán)境 343
16.7.4 執(zhí)行系統(tǒng)命令 343
16.7.5 排序和查找 344
16.8 locale 346
16.8.1 數(shù)值和貨幣格式 346
16.8.2 字符串和locale 348
16.8.3 改變locale的效果 349
16.9 總結(jié) 349
16.10 警告的總結(jié) 350
16.11 編程提示的總結(jié) 351
16.12 問(wèn)題 351
16.13 編程練習(xí) 352
第 17章 經(jīng)典抽象數(shù)據(jù)類(lèi)型 355
17.1 內(nèi)存分配 355
17.2 堆!355
17.2.1 堆棧接口 356
17.2.2 實(shí)現(xiàn)堆棧 356
17.3 隊(duì)列 364
17.3.1 隊(duì)列接口 364
17.3.2 實(shí)現(xiàn)隊(duì)列 365
17.4 樹(shù) 369
17.4.1 在二叉搜索樹(shù)中插入 370
17.4.2 從二叉搜索樹(shù)刪除節(jié)點(diǎn) 370
17.4.3 在二叉搜索樹(shù)中查找 371
17.4.4 樹(shù)的遍歷 371
17.4.5 二叉搜索樹(shù)接口 372
17.4.6 實(shí)現(xiàn)二叉搜索樹(shù) 373
17.5 實(shí)現(xiàn)的改進(jìn) 379
17.5.1 擁有超過(guò)一個(gè)的堆!379
17.5.2 擁有超過(guò)一種的類(lèi)型 380
17.5.3 名字沖突 380
17.5.4 標(biāo)準(zhǔn)函數(shù)庫(kù)的ADT 381
17.6 總結(jié) 383
17.7 警告的總結(jié) 384
17.8 編程提示的總結(jié) 384
17.9 問(wèn)題 384
17.10 編程練習(xí) 385
第 18章 運(yùn)行時(shí)環(huán)境 387
18.1 判斷運(yùn)行時(shí)環(huán)境 387
18.1.1 測(cè)試程序 387
18.1.2 靜態(tài)變量和初始化 390
18.1.3 堆棧幀 391
18.1.4 寄存器變量 391
18.1.5 外部標(biāo)識(shí)符的長(zhǎng)度 393
18.1.6 判斷堆棧幀布局 393
18.1.7 表達(dá)式的副作用 398
18.2 C和匯編語(yǔ)言的接口 399
18.3 運(yùn)行時(shí)效率 400
18.4 總結(jié) 402
18.5 警告的總結(jié) 403
18.6 編程提示的總結(jié) 403
18.7 問(wèn)題 403
18.8 編程練習(xí) 403
附錄 部分問(wèn)題和編程練習(xí)的答案 405