1.善於運用符號常量。
把數字埋在程序中沒有任何好處,一方面不能給以後看你程序的人提供什麼信息,一方面修改起來也很麻煩。
可以用define來定義符號常量。
#define 你想用的名稱 實際的數字或者字符序列 /*符號常量一般大寫,與小寫的變量相區分*/
如:#define MAX 100
注1:define定義的符號變量是沒有類型的,編譯不進行安全檢測,容易出問題,因此也有人說用const 可以完全代替define,
而且更好。
如:const int MAX = 100
注2:define只是替換。
如:#define A 3+5
const int A = 3+5
一式中 3 * A 就等價於 3 * 3 + 5 = 14
二式中 3 * A 就等價於 3 * 8 = 24
注3:const關鍵字不是真正表示常量,若將上式的A代入switch語句中,
case A:
也會出現錯誤
如果你要深入追究他倆的區別
2.getchar()函數返回的是int類型的數據。
int c; c=getchar();
3.當心編譯器由於貪心法進行錯誤編譯
比如:將x除以p指針所指向的值,之後結果賦值給Y
得: Y=x/*p;
但是編譯器會將/* 當成注釋的開始,將x直接賦值給Y
正確做法應該是Y=x/(*p)
4.用單引號引起來的相當於一個數字,用雙引號引起來的末尾還有 '\0'
5.
float *g() 指g()函數返回浮點類型的指針
float (*g)() 為指向返回的浮點類型的函數指針
6.多個運算符要按計算順序打括號,避免考慮不到符號優先級方面的問題產生錯誤的運算。
7.小心if、for、while後的分號位置,注意switch中,case後的break和最後的default。
若故意不加break語句,可以寫個注釋標明。
8.C語言中else總與最近的IF想匹配
if
if
else
這樣的結構最後也會自動變成
if
if
else
(不像PYTHON那樣,縮進對齊就行)
因此要養好習慣
if
{
if
}
else
這樣才和第一個IF想匹配,因為第二個IF被“封裝”了
9.對數組的操作就是對指針的操作。把數組當作參數代入函數,其實代入的就是指向第一個元素的指針。
main(int argc,char *argv[ ] )
{
}
等價於
main(int argc,char **argv)
{
}
10.數據的邊界問題。避免欄桿錯誤。