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