内容簡介
在計算機發展的曆史上,沒有哪一種程式設計語言像C語言這樣應用如此廣泛。
《C程式設計語言(原書第2版·新版 典藏版)》原著即為C語言的設計者之一DennisM.Ritchie和著名的計算機科學家BrianW.Kernighan合著的一本介紹C語言的經典著作。我們現在見到的大量論述C語言程式設計的教材和專著均以此書為藍本。原著第1版中介紹的C語言成為後來廣泛使用的C語言版本——标準C的基礎。
人們熟知的“hello,world”程式就是由《C程式設計語言(原書第2版·新版 典藏版)》首次引入的,現在,這一程式已經成為所有程式設計語言入門的第一課。原著第2版根據1987年制定的ANSIC标準做了适當的修訂,引入了新的語言形式,并增加了新的示例。通過簡潔的描述、典型的示例,作者全面、系統、準确地講述了C語言的各個特性以及程式設計的基本方法。對于計算機從業人員來說,《C程式設計語言(原書第2版·新版 典藏版)》是一本必讀的程式設計語言方面的參考書。
作者簡介
布萊恩· W. 克尼漢(Brian W. Kernighan) 貝爾實驗室計算科學研究中心進階研究人員,的計算機科學家。他參加了UNIX 系統、C語言、AWK語言和許多其他系統的開發,同時出版了許多在計算機領域具有影響的著作。
[美]丹尼斯· M. 裡奇(Dennis M.Ritchie) 1967年加入貝爾實驗室,曾任該實驗室計算科學研究中心系統軟體研究部主任。他和Ken L.Thompson共同設計并實作的C語言改變了程式設計語言發展的軌迹,是程式設計語言發展過程中的一個重要裡程碑。與此同時,他們兩人還設計并實作了UNIX 作業系統。正是由于這兩項巨大貢獻,Dennis M.Ritchie于1983年獲得了計算機界的*高獎—圖靈獎。此外,他還獲得了ACM、IEEE、貝爾實驗室等授予的多種獎項。
本書目錄
出版者的話
中文版序
譯者序
校譯者簡介
第2版前言
第1版前言
引言
第1章 導言1
1.1 入門1
1.2 變量與算術表達式3
1.3 for語句8
1.4 符号常量9
1.5 字元輸入/輸出9
1.5.1 檔案複制10
1.5.2 字元計數11
1.5.3 行計數13
1.5.4 單詞計數14
1.6 數組15
1.7 函數17
1.8 參數—傳值調用19
1.9 字元數組20
1.10 外部變量與作用域22
第2章 類型、運算符與表達式27
2.1 變量名27
2.2 資料類型及長度27
2.3 常量28
2.4 聲明31
2.5 算術運算符32
2.6 關系運算符與邏輯運算符32
2.7 類型轉換33
2.8 自增運算符與自減運算符37
2.9 位運算符38
2.10 指派運算符與表達式40
2.11 條件表達式41
2.12 運算符優先級與求值次序42
第3章 控制流45
3.1 語句與程式塊45
3.2 if-else語句45
3.3 else-if語句46
3.4 switch語句48
3.5 while循環與for循環49
3.6 do-while循環52
3.7 break語句與continue語句53
3.8 goto語句與标号54
第4章 函數與程式結構57
4.1 函數的基本知識57
4.2 傳回非整型值的函數60
4.3 外部變量62
4.4 作用域規則68
4.5 頭檔案69
4.6 靜态變量70
4.7 寄存器變量71
4.8 程式塊結構72
4.9 初始化72
4.10 遞歸73
4.11 C預處理器75
4.11.1 檔案包含75
4.11.2 宏替換76
4.11.3 條件包含78
第5章 指針與數組79
5.1 指針與位址79
5.2 指針與函數參數81
5.3 指針與數組83
5.4 位址算術運算86
5.5 字元指針與函數89
5.6 指針數組以及指向指針的指針92
5.7 多元數組95
5.8 指針數組的初始化97
5.9 指針與多元數組97
5.10 指令行參數98
5.11 指向函數的指針102
5.12 複雜聲明105
第6章 結構111
6.1 結構的基本知識111
6.2 結構與函數113
6.3 結構數組115
6.4 指向結構的指針119
6.5 自引用結構121
6.6 表查找125
6.7 類型定義(typedef)127
6.8 聯合128
6.9 位字段130
第7章 輸入與輸出133
7.1 标準輸入/輸出133
7.2 格式化輸出—printf函數135
7.3 變長參數表136
7.4 格式化輸入—scanf函數137
7.5 檔案通路140
7.6 錯誤處理—stderr和exit143
7.7 行輸入和行輸出144
7.8 其他函數145
7.8.1 字元串操作函數145
7.8.2 字元類别測試和轉換函數146
7.8.3 ungetc函數146
7.8.4 指令執行函數146
7.8.5 存儲管理函數147
7.8.6 數學函數147
7.8.7 随機數發生器函數148
第8章 UNIX系統接口149
8.1 檔案描述符149
8.2 低級I/O—read和write150
8.3 open、creat、close和unlink151
8.4 随機通路—lseek153
8.5 執行個體—fopen和getc函數的實作154
8.6 執行個體—目錄清單157
8.7 執行個體—存儲配置設定程式162
附錄A 參考手冊167
A.1 引言167
A.2 詞法規則167
A.2.1 記号167
A.2.2 注釋167
A.2.3 辨別符167
A.2.4 關鍵字168
A.2.5 常量168
A.2.6 字元串字面值170
A.3 文法符号170
A.4 辨別符的含義170
A.4.1 存儲類171
A.4.2 基本類型171
A.4.3 派生類型172
A.4.4 類型限定符172
A.5 對象和左值172
A.6 轉換173
A.6.1 整型提升173
A.6.2 整型轉換173
A.6.3 整數和浮點數173
A.6.4 浮點類型173
A.6.5 算術類型轉換173
A.6.6 指針和整數174
A.6.7 void175
A.6.8 指向void的指針175
A.7 表達式175
A.7.1 指針生成176
A.7.2 初等表達式176
A.7.3 字尾表達式177
A.7.4 一進制運算符179
A.7.5 強制類型轉換180
A.7.6 乘法類運算符180
A.7.7 加法類運算符181
A.7.8 移位運算符181
A.7.9 關系運算符182
A.7.10 相等類運算符182
A.7.11 按位與運算符183
A.7.12 按位異或運算符183
A.7.13 按位或運算符183
A.7.14 邏輯與運算符183
A.7.15 邏輯或運算符183
A.7.16 條件運算符184
A.7.17 指派表達式184
A.7.18 逗号運算符185
A.7.19 常量表達式185
A.8 聲明185
A.8.1 存儲類說明符186
A.8.2 類型說明符187
A.8.3 結構和聯合聲明188
A.8.4 枚舉191
A.8.5 聲明符191
A.8.6 聲明符的含義192
A.8.7 初始化195
A.8.8 類型名197
A.8.9 typedef198
A.8.10 類型等價199
A.9 語句199
A.9.1 帶标号語句199
A.9.2 表達式語句199
A.9.3 複合語句200
A.9.4 選擇語句200
A.9.5 循環語句201
A.9.6 跳轉語句201
A.10 外部聲明202
A.10.1 函數定義202
A.10.2 外部聲明204
A.11 作用域與連接配接204
A.11.1 詞法作用域205
A.11.2 連接配接205
A.12 預處理205
A.12.1 三字元序列206
A.12.2 行連接配接206
A.12.3 宏定義和擴充206
A.12.4 檔案包含208
A.12.5 條件編譯209
A.12.6 行控制210
A.12.7 錯誤資訊生成210
A.12.8 pragma210
A.12.9 空指令210
A.12.10 預定義名字211
A.13 文法211
附錄B 标準庫