本書圍繞C語言編程學習和開發(fā)實踐中經(jīng)常遇到的問題和重點,結(jié)合大量代碼和圖表,從容易出現(xiàn)的錯誤(ERROR)開始講起,到類型轉(zhuǎn)換、字符串和指針、結(jié)構(gòu)體和共用體、文件處理、在程序運行時動態(tài)生成必要大小的對象(變量)的方法,再到線性表的應用、二叉查找樹的應用、控制臺畫面的控制等,詳細介紹了C語言中的眾多技巧,目標在于提高讀者解決實際問題的能力。本書適合有一定C語言基礎的讀者閱讀。
一本熱銷十余年的編程系列圖書
日本編程大師柴田望洋的匠心之作
豐富的圖表,通俗的示例,有趣的知識,實用的技巧,從理論到實踐,一本教你攻克C語言難關(guān)的必讀教程
204段代碼+174幅圖表 | 比課本更易懂!
原版系列累計銷量超120萬冊
榮獲日本工學教育協(xié)會著作獎
雙色印刷|技術(shù)書也能賞心悅目
作者柴田望洋,1963年出生,日本復崗工業(yè)大學信息工程學院副教授。編寫了一系列極富影響力的計算機教材和參考書,如《明解C++》《明解Java》等。
目 錄
第 1章 看不見的錯誤輸入 1
1-1 看不見的錯誤 2
看不見的錯誤 2
難以察覺的錯誤 3
容易忽略的錯誤 5
預處理指令中的空白字符 7
#if 指令和注釋 7
頭文件保護符 9
函數(shù)式宏及其運行效率 10
函數(shù)式宏的副作用 10
C++ 中max2的實現(xiàn) 12
1-2 初始化 15
初始化和賦值 15
對象 16
自動存儲期 16
靜態(tài)存儲期 18
標識符的有效范圍和初始化 20
數(shù)組的初始化 22
多維數(shù)組的初始化 24
使用 typedef名的數(shù)組的初始化 26
第 2章 類型轉(zhuǎn)換 29
2-1 類型轉(zhuǎn)換 30
-1和1哪個大? 30
if 語句的求值 31
關(guān)系運算符和關(guān)系式 31
相等運算符和等式 32
if 語句的控制表達式 35
隱式類型轉(zhuǎn)換 37
普通算術(shù)類型轉(zhuǎn)換 38
2-2 有符號整數(shù)和無符號整數(shù) 39
無符號整數(shù)在內(nèi)存中的表示 39
有符號整數(shù)在內(nèi)存中的表示 41
整型提升 43
有符號整數(shù)和無符號整數(shù)之間的類型轉(zhuǎn)換 45
問題的解決 47
補碼表示的有符號整數(shù)到無符號整數(shù)的類型轉(zhuǎn)換 48
第 3章 關(guān)于指針 53
3-1 指針和地址 54
地址和取址運算符 54
指針和間接運算符 55
3-2 指針和函數(shù)調(diào)用 58
值傳遞 58
傳遞指針給函數(shù) 59
傳遞指針的指針給函數(shù) 61
3-3 指針和數(shù)組 64
數(shù)組的傳遞 64
表示數(shù)組末尾的哨兵 67
指針、數(shù)組和數(shù)據(jù)類型 69
3-4 指針和多維數(shù)組 72
數(shù)據(jù)類型的派生和多維數(shù)組 72
多維數(shù)組和指針 76
3-5 動態(tài)對象的生成 80
動態(tài)存儲期 80
void 指針 81
單個對象的生成 81
數(shù)組對象的生成 83
多維數(shù)組對象的生成 85
第 4章 字符串和指針 89
4-1 字符和字符串 90
字符和字符串 90
字符和字符常量 90
字符的值 91
字符串 93
字符串字面量 95
字符串字面量和字符串常量 97
用指針實現(xiàn)的字符串的操作 99
指向字符串的指針 100
字符串數(shù)組 101
4-2 字符串的處理 103
字符串的復制 103
字符串不能為空? 106
使字符串為空的兩種方法 108
使字符串為空的錯誤方法 110
問題的解決 111
存儲空間的清空 113
字符串的動態(tài)生成 115
字符串數(shù)組的動態(tài)生成 117
第 5章 NULL 119
5-1 空指令、空字符和空語句 120
null 120
空指令 120
空字符 121
空字符串 121
空語句 122
5-2 空指針和NULL 124
空指針 124
空指針常量 124
返回空指針的函數(shù) 124
空指針在內(nèi)存中的表示不一定為 0 125
第 6章 函數(shù)的定義和聲明 129
6-1 函數(shù)的定義和調(diào)用 130
函數(shù)定義的順序 130
調(diào)用未聲明的函數(shù) 131
默認的 int型 132
未聲明的函數(shù)的處理 133
老式風格的函數(shù)聲明 135
老式風格的函數(shù)聲明的陷阱 136
6-2 函數(shù)原型聲明 137
函數(shù)原型聲明 137
默認參數(shù)提升 138
參數(shù)名 142
可變參數(shù)的聲明 143
va_start 宏:訪問可變參數(shù)前的準備 145
va_arg 宏:取出可變參數(shù) 146
va_end 宏:結(jié)束對可變參數(shù)的訪問 147
vprintf 函數(shù)/vfprintf函數(shù):輸出到流 147
第 7章 結(jié)構(gòu)體和共用體 151
7-1 結(jié)構(gòu)體 152
結(jié)構(gòu)體的基礎 152
成員的訪問 153
結(jié)構(gòu)體對象的初始化 153
結(jié)構(gòu)體和宏 154
結(jié)構(gòu)體和 typedef聲明 155
相互引用的結(jié)構(gòu)體 157
7-2 結(jié)構(gòu)體與字節(jié)對齊 162
代碼優(yōu)化 162
結(jié)構(gòu)體和字節(jié)對齊 163
offsetof 宏 165
7-3 共用體 168
共用體 168
共用體對象的初始化 168
公共初始序列 169
第 8章 文件處理和文本文件 173
8-1 文本文件 174
文件和流 174
文件的打開和關(guān)閉 175
FILE 型 177
輸入輸出庫函數(shù) 178
問題和解決方法 184
解決方法一:添加無效數(shù)據(jù) 185
解決方法二:優(yōu)化程序 186
8-2 作為字符的數(shù)據(jù) 189
數(shù)值的讀取 189
數(shù)值和字符串 190
使用 sprintf 函數(shù)將數(shù)據(jù)寫入字符串 196
使用 sscanf 函數(shù)從字符串中讀取數(shù)據(jù) 197
第 9章 文件的應用 201
9-1 流和緩沖區(qū) 202
調(diào)用的函數(shù)未被執(zhí)行? 202
緩沖區(qū)的刷新 203
流的緩沖區(qū) 205
問題的解決 207
9-2 文本文件和二進制文件 209
文本和二進制 209
文件的轉(zhuǎn)儲 210
二進制文件的訪問 212
字節(jié)序 214
換行符的處理 214
第 10章 棧溢出 217
10-1 棧 218
棧的實現(xiàn) 218
10-2 棧溢出 224
函數(shù)調(diào)用和!224
數(shù)據(jù)和!225
棧溢出 227
檢測棧溢出的原理 229
如果棧被破壞 230
第 11章 庫開發(fā)的基礎 231
11-1 源文件的分離和鏈接 232
單字符輸入輸出庫 232
隊列 234
庫的使用示例 235
分離式編譯 236
鏈接性 237
11-2 庫開發(fā) 240
源文件的分離 240
正確的示例 243
第 12章 線性表的應用 249
12-1 線性表 250
線性表 250
節(jié)點的實現(xiàn) 250
線性表的特點 251
線性表的實現(xiàn) 252
線性表存儲空間的動態(tài)分配 256
12-2 用數(shù)組實現(xiàn)的線性表 258
用數(shù)組實現(xiàn)的線性表 258
刪除的記錄的管理 261
12-3 帶索引的線性表 264
帶索引的線性表 264
索引表 270
第 13章 二叉查找樹的應用 273
13-1 二叉查找樹 274
二叉查找樹 274
二叉查找樹和線性表 278
13-2 非遞歸查找及其應用 282
遞歸的過程 282
遞歸函數(shù)的非遞歸實現(xiàn) 283
問題的解決 285
第 14章 控制臺的操作 291
14-1 轉(zhuǎn)義序列 292
轉(zhuǎn)義序列 292
14-2 畫面控制庫 296
Windows API 的使用 296
clearscreen 實用程序 299
setcolor 實用程序 299
猜數(shù)游戲 301
致 謝 304
作者簡介 305