齣版者的話
譯者序
序
前言
第一部分 計算機存儲:內存和文件
第1章 程序的執行 2
1.1 編譯 2
1.2 重定嚮輸齣 6
第2章 棧內存 7
2.1 值和地址 7
2.2 棧 8
2.3 調用棧 9
2.3.1 返迴位置 9
2.3.2 函數實參 12
2.3.3 局部變量 14
2.3.4 值地址 15
2.3.5 數組 16
2.3.6 獲取地址 17
2.4 可見度 17
2.5 習題 20
2.5.1 繪製調用棧I 20
2.5.2 繪製調用棧II 20
2.5.3 地址 21
2.6 習題解答 21
2.6.1 繪製調用棧I 21
2.6.2 繪製調用棧II 22
2.6.3 地址 22
2.7 在DDD(命令行調試程序)上檢測調用棧 22
第3章 預防、檢測及消除bug 26
3.1 開發軟件≠編碼 26
3.1.1 編程前 26
3.1.2 編程中 27
3.1.3 編程後 28
3.2 常見錯誤 28
3.2.1 未初始化變量 28
3.2.2 錯誤數組下標 28
3.2.3 錯誤數據類型 28
3.3 後執行式和交互式調試 28
3.4 生産代碼與測試代碼分離 29
第4章 指針 30
4.1 作用域 30
4.2 swap函數 31
4.3 指針 33
4.4 再論swap函數 37
4.5 類型錯誤 39
4.6 數組和指針 40
4.7 類型規則 43
4.8 指針運算 44
4.9 習題 47
4.9.1 swap函數1 47
4.9.2 swap函數2 48
4.9.3 swap函數3 48
4.9.4 swap函數4 48
4.9.5 swap函數5 49
4.9.6 15 552種變化 49
4.10 習題解答 50
4.10.1 swap函數1 50
4.10.2 swap函數2 50
4.10.3 swap函數3 51
4.10.4 swap函數4 51
4.10.5 swap函數5 51
第5章 編寫和測試程序 52
5.1 不同的數組元素 52
5.1.1 main函數 52
5.1.2 areDistinct函數 53
5.1.3 編譯和鏈接 54
5.1.4 make工具 55
5.2 使用Makefile測試 57
5.2.1 生成測試用例 58
5.2.2 重定嚮輸齣 58
5.2.3 使用diff去比較輸齣 58
5.2.4 添加測試到Makefile 59
5.3 無效的內存訪問 60
5.4 使用valgrind檢查內存訪問錯誤 62
5.5 測試覆蓋 64
5.6 限製內核大小 67
5.7 帶有死循環的程序 67
第6章 字符串 69
6.1 字符數組 69
6.2 C語言中的字符串函數 72
6.2.1 復製函數:strcpy 72
6.2.2 比較函數:strcmp 73
6.2.3 尋找子字符串函數:strstr 73
6.2.4 尋找字符函數:strchr 74
6.3 理解argv 74
6.4 對子字符串計數 77
第7章 編程問題和調試 80
7.1 實現字符串函數 80
7.1.1 C語言庫 80
7.1.2 頭文件 80
7.1.3 mystring.h 82
7.1.4 創建輸入和正確輸齣 82
7.1.5 Makefile 86
7.1.6 mystring.c 86
7.1.7 使用const 88
7.2 調試 89
7.2.1 找到死循環 90
7.2.2 找到無效內存訪問 91
7.2.3 檢測無效內存訪問 92
第8章 堆內存 94
8.1 用malloc函數創建數組 94
8.2 棧和堆 96
8.3 返迴堆地址的函數 98
8.4 C語言中的二維數組 99
8.5 指針和參數 101
第9章 使用堆內存的編程問題 104
9.1 對數組排序 104
9.1.1 生成測試輸入和期望輸齣 104
9.1.2 重定嚮輸入 105
9.1.3 整數排序 107
9.1.4 使用valgrind檢測內存泄漏 110
9.2 使用qsort進行排序 111
9.2.1 qsort 111
9.2.2 比較函數 112
9.2.3 執行範例 114
9.2.4 對字符串排序 115
第10章 讀寫文件 118
10.1 通過argv傳遞一個文件名 118
10.2 讀取文件 119
10.2.1 讀取字符型:fgetc 119
10.2.2 讀取整型:fscanf(...%d...) 121
10.3 寫入文件 123
10.4 讀寫字符串 125
第11章 編程解決使用文件的問題 128
11.1 對文件中的整數進行排序 128
11.2 計算字符齣現的次數 130
11.3 計算單詞齣現的次數 132
11.4 如何注釋程序 134
第二部分 遞歸
第12章 遞歸 138
12.1 在限製條件下選取小球 138
12.1.1 雙色球問題 138
12.1.2 三色球問題 139
12.1.3 附加限製條件 140
12.2 單行道 142
12.3 漢諾塔 143
12.4 計算整數分拆 145
12.4.1 計算“1”的個數 147
12.4.2 僅使用奇數進行分拆 148
12.4.3 使用遞增數進行分拆 148
12.4.4 交替使用奇偶數進行分拆 149
12.4.5 整數分拆問題的推廣 151
12.4.6 解決分拆問題的錯誤方法 151
第13章 遞歸函數 152
13.1 在限製條件下選取小球 152
13.2 單行道 155
13.3 漢諾塔 156
13.4 整數分拆 158
13.5 階乘 159
13.6 斐波那契數列 161
13.7 利用gprof進行性能分析 165
第14章 整數分拆 167
14.1 堆內存和棧內存 168
14.2 追蹤遞歸函數調用 176
14.3 約束條件下的分拆 178
14.3.1 僅使用奇數進行分拆 179
14.3.2 使用遞增數進行分拆 179
14.3.3 交替使用奇偶數進行分拆 180
14.3.4 使用gprof和gcov查找性能瓶頸 180
第15章 使用遞歸解決問題 187
15.1 二分搜索 187
15.2 快速排序 189
15.3 排列組閤 195
15.4 棧排序 198
15.4.1 例子1 199
15.4.2 例子2 199
15.4.3 例子3 199
15.4.4 例子4 199
15.4.5 可排序棧 200
15.5 追蹤遞歸函數 203
15.6 一個存在錯誤的遞歸函數 205
第三部分 結構
第16章 程序員可定義數據類型 208
16.1 結構體和對象 208
16.2 作為實參傳遞對象 212
16.3 對象和指針 214
16.3.1 返迴一個對象 216
16.3.2 對象和malloc 216
16.4 構造函數和析構函數 218
16.5 結構中的結構 224
16.6 二進製文件和對象 226
第17章 使用結構的編程問題 230
17.1 個人信息庫排序 230
17.2 壓縮十進製數位 235
17.2.1 數製 235
17.2.2 用1字節錶達2個十進製數位 236
17.2.3 位運算 236
17.2.4 壓縮和恢復十進製 239
17.2.5 十進製壓縮編程 239
17.3 二進製文件和指針 243
第18章 鏈錶 245
18.1 可擴展類型 245
18.2 鏈錶 246
18.3 鏈錶的插入 246
18.4 鏈錶的查找 248
18.5 從鏈錶中刪除 249
18.6 打印鏈錶 252
18.7 鏈錶的銷毀 253
第19章 使用鏈錶的編程問題 256
19.1 隊列 256
19.2 數字排序 256
19.3 稀疏數組 257
19.4 單鏈錶反轉 262
第20章 二叉搜索樹 264
20.1 二叉搜索樹 265
20.2 二叉搜索樹的插入 266
20.3 二叉搜索樹的搜索 269
20.4 二叉搜索樹的遍曆 269
20.5 二叉搜索樹的刪除 272
20.6 二叉搜索樹的銷毀 274
20.7 主函數main 274
20.8 鏈接器Makefike 275
20.9 不同的二叉樹結構 275
第21章 綫程並行編程 278
21.1 並行編程 278
21.2 多任務處理 278
21.3 POSIX綫程 279
21.4 子集和 280
21.4.1 生成測試實例 281
21.4.2 字典順序處理 283
21.4.3 多綫程處理 287
21.5 多綫程處理過程的交叉運行 289
21.6 綫程同步 293
21.7 阿姆達爾定律 295
第四部分 應用
第22章 尋找迷宮齣口 298
22.1 迷宮的文件格式 298
22.2 讀取迷宮文件 299
22.3 迷宮結構體 303
22.4 逃跑策略 306
22.5 策略的實現 308
22.5.1 canMove函數 308
22.5.2 getOut函數 309
22.5.3 打印訪問過的位置 313
第23章 圖像處理 316
23.1 圖像結構體 316
23.2 圖像處理 321
23.2.1 圖像像素和顔色 321
23.2.2 處理函數 322
23.2.3 應用一個顔色濾波器 322
23.2.4 圖像顔色反轉 324
23.2.5 邊緣檢測 324
23.2.6 顔色均衡 326
第24章 霍夫曼壓縮 329
24.1 例程 329
24.2 編碼 330
24.2.1 計算頻率 330
24.2.2 按頻率排序 332
24.2.3 構建編碼樹 334
24.2.4 創建編碼本 342
24.2.5 壓縮文件 346
24.2.6 位壓縮 349
24.3 解碼 353
附錄A Linux 370
附錄B 版本控製 373
附錄C 集成開發環境 376
索引 385
· · · · · · (
收起)