C語言的圖書多如牛毛,但絕大多數都很單純,無外乎語法、技巧或者實例。C語言的教與學,遠不止語法和示例這么簡單。語言是應用的工具,只能深入到歷史和實際應用的土壤里,從現實中尋找這門計算機語言的定位,學習它的語法,認識它所能解決的現實問題。所以,這本書面向C語言的初學者,結合最新的C語言標準9899:2011,不但介紹了和C語言本身有關的各個方面:詞法元素、類型、聲明、函數、表達式、語句、預處理、標準庫,更是以此為主線,融匯了大量的現實和應用場景,從計算機原理、程序設計、編譯原理、操作系統接口、數據結構,等等。為了幫助讀者更好地理解C語言、操作系統接口以及用C語言解決實際問題這三者之間的關系,本書還特意提供了一個關系型數據庫的實例和一個WEB服務器編程的實例。本書的目標:a.基礎。本書面向初學者,介紹C語言的基礎知識,但有深度和高度;b.全面。依據C語言的最新標準,盡量涵蓋它的所有內容;c.標準化。摒棄某些傳統的概念、術語和不正確、不精確的闡述;d.新穎。正本清源,采用與傳統圖書不同的形式來講解。比如,先介紹#include <stdio.h>是什么東西,怎么來的,有什么用,而不是象別的書一樣,一上來就使用,而且對它的功能語焉不詳。不單單是講述C的語法,更深入到與之相關的各個方面,比如操作系統環境、編譯器、數據庫和WEB應用,通過各種互相結合的場景,讓讀者真正認識這門語言,真正掌握這門語言,不致于學了之后還是感到茫然。e.通俗易懂。不是指語言上的通俗化和口語化,而是真正地按照認知的規律和過程,由淺入深,由表及里,不但知其然,還要知其所以然。
李忠,主要出版著作《穿越計算機的迷霧》《x86匯編語言:從實模式到保護模式》《穿越計算機的迷霧(第2版)》。
第1章 從1加到100
1.1 如何從1加到100
1.1.1 標準整數類型
1.2 相加過程的實現
1.2.1 左值和左值轉換
1.2.2 表達式的值
1.2.3 運算符的優先級
1.2.4 運算符的結合性
1.3 源文件
1.3.1 函數
1.3.2 return語句
1.3.3 main函數
第2章 程序的翻譯、執行和調試
2.1 C實現
2.2 程序的翻譯和執行
2.3 程序的調試
2.4 集成開發環境
2.5 執行環境
2.6 從1加到N
2.6.1 注釋
2.6.2 函數調用和函數調用運算符
2.6.3 函數原型
第3章 更多的相加方法
3.1 變量的初始化
3.2 認識復合賦值
3.3 認識遞增運算符
3.4 初識復雜的表達式
3.5 認識關系運算符
3.6 求值 50
3.7 認識逗號表達式
3.7.1 全表達式和序列點
3.8 認識表達式語句
3.9 認識遞減和邏輯求反運算符
3.10 參數值的有效性檢查
3.10.1 認識if語句
3.10.2 認識邏輯或運算符
3.10.3 未定義的行為
3.10.4 搖擺的else子句
3.10.5 認識邏輯與運算符
3.11 認識標號語句和goto語句
第4章 指針不是指南針
4.1 認識一元&和一元*運算符
4.2 什么是指針
4.3 指針類型的變量
4.4 指向函數的指針
4.4.1 函數指示符—指針轉換
4.5 返回指針的函數
4.6 掌握C語言需要建立類型的觀念
4.6.1 整型常量
4.6.2 整數—整數轉換
4.6.3 表達式的類型
4.6.4 認識整型轉換階和整型提升
4.6.5 指針—整數轉換
4.6.6 指針—指針轉換
4.7 指向指針(類型)的指針
第5章 準備顯示累加結果
5.1 什么是數組
5.1.1 數組變量的聲明
5.1.2 數組變量的初始化
5.1.3 認識sizeof和乘性運算符
5.1.4 認識變長數組
5.2 文字和編碼
5.2.1 字符數組
5.2.2 字符常量
5.2.3 脫轉序列
5.2.4 字面串和字符串
5.3 訪問數組元素
5.3.1 數組—指針轉換
5.3.2 指針運算和for語句
5.3.3 下標運算符
5.3.4 指針的遞增和遞減
5.4 指向數組的指針
5.5 元素類型為指針的數組
5.8 將數字轉換為字符串
5.9 元素類型為數組的數組
第6章 輸入和輸出
6.1 輸入輸出那點事
6.2 系統調用
6.3 編譯和鏈接
6.4 庫
6.5 頭文件、預處理和翻譯單元
6.6 UNIX和類UNIX函數庫
6.6.1 限定的類型
6.6.2 變參函數
6.6.3 認識逐位或、逐位與和逐位異或運算符
6.6.4 指向void的指針
6.6.5 結構類型
6.7 Windows動態鏈接庫
6.7.1 認識成員選擇運算符“.”
6.7.2 復合字面值
6.7.3 控制臺I/O和音頻播放
6.7.4 函數main的定義
6.8 C標準庫
6.8.1 流
6.8.2 restrict限定的類型
6.8.3 C標準庫的實現
6.8.4 標準輸入和標準輸出
6.8.5 標準I/O的緩沖區
6.8.6 直接的輸入輸出
6.8.7 格式化輸出
6.8.8 格式化輸入
6.8.9 格式化輸入輸出的實例
第7章 字符集和字符編碼
7.1 字符集和字符編碼的演變
7.1.1 GB2312字符集
7.1.2 GBK和GB18030字符集
7.1.3 UNICODE字符集和編碼方案
7.2 多字節字符和寬字符
7.2.1 源字符集和執行字符集
7.2.2 多字節字符、寬字符和字節序
7.3 C語言的國際化
7.3.1 條件包含
第8章 歡迎來到類型之家
8.1 擴展整數類型
8.2 布爾類型_Bool
8.3 枚舉類型
8.4 認識switch語句
8.5 聯合類型
8.6 復數類型
8.7 限定的類型
8.8 類型的兼容性
8.9 類型轉換
8.9.1 實浮點—整數轉換
8.9.2 實浮點—實浮點轉換
8.9.3 復數—復數轉換
8.9.4 實數—復數轉換
8.9.5 常規算術轉換
第9章 作用域、鏈接、線程和存儲期
9.1 標識符的作用域
9.1.1 函數作用域
9.1.2 文件作用域
9.1.3 塊作用域
9.1.4 函數原型作用域
9.1.5 作用域的重疊
9.1.6 名字空間
9.2 標識符的鏈接
9.3 進程和線程
9.3.1 創建POSIX線程
9.3.2 線程同步
9.3.3 執行時間的測量
9.4 變量的存儲期
9.4.1 線程存儲期
9.4.2 靜態存儲期
9.4.3 自動存儲期
9.4.4 指派存儲期
第10章 Windows編程基礎
10.1 如何編寫Windows程序
10.1.1 注冊窗口類
10.1.2 創建窗口
10.1.3 進入消息循環
10.2 窗口過程
10.2.1 函數調用約定
10.2.2 消息處理
10.2.3 回調函數
10.3 數據鏈表
10.3.1 作用域的起始點
10.3.2 動態內存分配
10.4 創建和應用所選的字體
10.5 關閉窗口并退出程序
第11章 遞歸調用、計算器和樹
11.1 遞歸的原理
11.2 復雜計算器
11.2.1 程序的翻譯過程
11.2.2 算式的語法
11.2.3 詞法分析
11.2.4 函數指定符_Noreturn
11.2.5 語法分析
11.3 樹和二叉樹
11.4 計算器的二叉樹版本
11.4.1 非本地跳轉(setjmp/longjmp)
第12章 運算符和表達式
12.1 全表達式
12.2 左值轉換
12.3 基本表達式
12.3.1 泛型選擇
12.4 后綴表達式
12.4.1 復合字面值
12.4.2 數組下標
12.4.3 函數調用
12.4.4 成員選擇
12.4.5 后綴遞增
12.4.6 后綴遞減
12.5 一元表達式
12.5.1 前綴遞增
12.5.2 前綴遞減
12.5.3 地址
12.5.4 間接
12.5.5 正號
12.5.6 負號
12.5.7 逐位取反
12.5.8 邏輯非
12.5.9 尺寸
12.5.10 對齊
12.6 轉型表達式
12.7 乘性表達式
12.7.1 乘法
12.7.2 除法
12.7.3 取余
12.8 加性表達式
12.8.1 加法
12.8.2 減法
12.9 移位表達式
12.9.1 左移
12.9.2 右移
12.10 關系表達式
12.11 等性表達式
12.12 逐位與表達式
12.13 逐位異或表達式
12.14 逐位或表達式
12.15 邏輯與表達式
12.16 邏輯或表達式
12.17 條件表達式
12.18 賦值表達式
12.18.1 簡單賦值
12.18.2 復合賦值
12.19 逗號表達式