C語言練習總結

第1章 預處理、宏定義
使用宏的注意事項:
1.宏表達式要加括號,包括變量括號,表達式括號,避免隱藏的錯誤。
 如:#define Max(a,b) ((a)>(b)?(a):(b))
2.宏裏面不要帶返回語句,如 return;
3.使用宏提高源程序的可維護性、工作效率等,但要使用得當。

第2章 數據類型、數據結構
1.搞清聯合體和結構體的區別,以及在內存空間上的佔用情況。
2.搞清堆棧、隊列、順序存儲結構和邏輯存儲結構的概念和區別等。
3.數組、指針、指針數組、數組指針的區別。
4.二維數組的定義等。

第3章:變量、運算
1.多重循環中把循環次數多的放內層,循環次數少的放外層。
2.在for/while等循環中,注意循環條件的截止,避免死循環出現。
3.變量定義後要初始化,避免對未初始化的變量進行操作導致的錯誤。
4.全局變量和局部變量變量名不要一致,如果變量名一致在局部函數中操作的是局部變量。
5.在for/while等循環中,對數組操作,注意閾值的取值,避免數組越界的情況。
6. sizeof對字符串的計算,如char ah[] = "\\\0w\0";  sizeof(ah)=5。
7. sizeof對結構體計算,如struct BBB{…}*p;(假設struct BBB共24個字節) p=0x100000; p+0x1=0x100018;(unsigned long)p + 0x1=0x100001;(unsigned long *)p+0x1=0x100004;(char *)p=0x100001;
8.局部變量佔用空間不能太大,否則堆棧空間將不足。
9.函數入參要注意檢查有效性,特別是指針。
10.scanf輸入除了字符串外,其他變量注意都要取地址符&。

第4章:數組、字符串、指針、引用
1.函數傳入的形參如果是指針要記得做指針的有效性判斷。
2.注意內存泄露的情況,函數異常退出時務必記得打掃戰場。
3.字符數組,注意區別:存入0,即結束符'\0';存入'0',是字符'0'。
4.搞清指針對數組的操作,數組的特殊之處:利用取地址符取地址永遠是首地址,無限循環。

第5章:字節序、字節對齊
1.大端模式(Big-endian):字數據的高字節存儲在低地址中,低字節存放在高地址中;小端模式(Littile-endian):字數據的低字節存儲在低地址中,高字節存放在高地址中。
2.網絡字節序默認是大字節序!Intel的X86 CPU用的是小端字節序,IBM 的 PowerPC 用的是大端字節序。
3.大端模式和小端模式,對低位的操作(修改、替換),百考不厭,細節很重要。
4.搞清結構體中元素的排列、多少字節對齊對結構體佔用空間的影響。
1字節對齊:short、long不用符合偶字節或4字節對齊。
2字節對齊:short要符合偶字節對齊,long要符合4字節對齊。
4字節對齊:short要符合偶字節對齊,long要符合4字節對齊。
5.注意union和struct的字眼,計算佔用空間大小時區別很大!
6.sizeof對union和struct的計算,都是按char字節爲單位計算!
7.注意指針數組的佔空空間計算,如下:
UCHAR *pucCharArray[10][10];
sizeof(pucCharArray) = 400

第6章:資源申請釋放、越界、溢出
1.注意內存越界的問題:
內存空間分配長度不夠,strcpy函數拷貝越界
類型轉換導致函數調用時寫內存越界(如:char強制轉換爲int導致的寫內存越界)
數組越界,關注最後一個元素(如:unsigned char Array[MAX_LEN]; ...  for (  int i = 0; i <= MAX_LEN; i++ ){...})
2.避免使用大的局部變量,可能導致堆棧溢出。
3.過程/函數中分配的內存,如果不再使用,在過程/函數退出之前要釋放。
4.過程/函數中分配的內存,如果過程/函數異常退出時要釋放。
5.在申請內存的函數中,傳入的要是二級指針,返回一級指針。如:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章