The sublime and the ridiculous are often so nearly related that it is difficult to class them separately
-- Tom Paine
真理與荒謬是如此的接近,以至於無法單獨把他們分開
-- 托馬斯.潘恩(英國作家)
本章也是C語言的基礎,因此,這章講的就比較粗略了,發現作者對語法不是很感興趣, 就像他在第二章裏寫的: The emphasis is on design approaches and ways of organizing programs rather than on language details.
這本書的結構就是這樣的,詳細講的是思想,具體的語法作者在後面列了一個附錄,如有需要敬請查閱.
不過這章也講了一些底層的東西和容易錯的問題,深度還是夠的, 比如:
- char *p="Plato" , 其中,此字符串是不允許修改的
- 指針的操作:關於數組指針大小問題(面試常考)
- 常量的空間分配問題: 如果常量的值能完全確定, 那麼,就不會分配有空間(和宏定義是一樣的) 但如果常量的地址被使用,那麼,還要分配空間, 常量數組必須分配空間,因爲無法確定使用哪個元素,但很多機器是把常量數組放在只讀空間,從而提高性能
- 內存對齊(面試常考的問題)
- 指針常量和常量指針(面試常考)
- 還介紹了一個精緻的小程序: 輸入N個字符串,統計重複字符串出現的次數. 這個似乎以前面試也考過. 如果用C語言的思維會比較麻煩,還要考慮溢出的問題. 但用C++的思維卻很簡單, 具體例子請見書
章後作者的建議:
1. 避免對指針做不常見的操作
2. 小心數組越界問題
3. 使用0而不是NULL
4. 使用vector和valarray,而不是c語言內置的數組(作者已經強調好多次了,不要用原來的內置的數組了!)
5. 使用string而不是char數組
6. 儘量少使用引用做函數參數
7. 除非做底層操作,不要使用void*
8. 不要使用”魔術數字”,使用有含義的常量(這個恐怕是所有語言都有提及吧)
本章思維導圖: