C和指針 (pointers on C)——第一章:快速上手
不太苟同大多數人認為很多程序員沒有幾個學C學的好的,那就多看看這本書。
本人只是作為讀書筆記來寫。有時候會附帶一些題目和解答。
開通此類專欄,既為敲磚引玉,也為自勉,望鼓勵!
第一章:快速上手
我每次都是復習的來寫。我想是這一章,哪怕是上手也需要有一定的C基礎。
總結:提出了stdio.h中一些基本的函數,如scanf(),printf(),getchar(),putchar(),gets(),puts()等io函數。
關於NULL和NUL的區別也說了一些。
NUL也就是字符串中的截尾字符'\n',並不存在與預處理中。
NULL是stdio中定義好的字符,表示指針為空,為整型0。
EOF也是stdio種定義好的字符,表示為指針指向文檔的結尾。
警告:
1、在scanf函數的標量參數前並未添加&字符。
首先是標量參數,舉個例子,數組元素參數是標量參數。它通過值傳遞來通過main和函數間傳遞。
&符號在這裡是尋址。如果是數組參數,它本身是個地址,所以就不需要做尋址運算了。
2、機械地把printf函數的格式代碼照搬於scanf函數。
3、在應該使用&&操作符的地方誤用了&操作符。
一個是邏輯操作符,一個是尋址。一般細心都可以避免這個問題。
4、誤用=操作符而不是==操作符來測試相等性。
同上,不過這個問題好像犯錯的人更多一些。
尤其是在if、while判斷中經常出現。
如:while(pointer==EOP)
編程提示:
1、使用#include指令避免重復聲明。同時在#include 裡面放置函數的原型。
2、使用#define 指令給常量命名。
3、使用數組下標前先檢查他們的值。
如:ch = getchar();
while(ch != EOF && ch != '\n')
ch = getchar();
這是個好習慣。
4、在while/if表達式中蘊含賦值操作。
如:
ch = getchar();
while(ch != EOF && ch != '\n')
ch = getchar();
就可以寫成:
while((ch = getchar()) != EOF && ch != '\n')
;
這樣,就可以消除冗余語句。你可以理直氣壯地聲稱這種可讀性非常差的代碼技巧應該避免使用。我也可以理直氣壯地告訴你,這是因為你對C不是很熟。
大牛們在讀代碼的時候根本不會出現任何問題。
5、如何編寫一個空循環體。
while((ch = getchar()) != EOF && ch != '\n')
;
這個分號是非常重要的,否則下一句不相關的語句就會被拖入while循環。
6、如何進行檢查,確保數組不越界。
比如在存數組中,必需包括以下:
1、如果輸入行結束或者輸入行數組已滿,跳出循環break;
2、如果輸出行數據空間不夠,只賦值可以容納的數據;