讀C語言

1.C語言大多數編譯器不對數組下標進行檢測,也就是說若是定義一個數組A[6],你去訪問A[9],可能不會出錯,可是屬於非法的。因此,對數組越界檢查是程序員的責任。 2.對於多維數組,若是定義一個二維數據,按照一維數據去訪問,結果也操做系統的內存管理方法有關。如定義A[3][4],若是去訪問A[7],結果內存管理有關,若是分配內存時按行分配,可訪問的是A[2][0],若是按列分配,可能訪問的是A[0][2],但編譯器沒有報錯,只能說是沒有語法錯誤,但內存操做是錯誤的。 3.定義一個整形來保存字符的優勢。int a ;a= getchar(); a!=EOF || a!='\n' 能夠避免溢出帶來產生不是EOF卻誤碼認爲是EOF,字符的本質是整形。 4.strcpy,strncpy,memcpy,memcpy strcat這些函數的第一個參數不能是字符串常量的緣由:既然要對這個地址後面的內存進行操做,那固然不能是常量。如char const a[10] ="2324", char b[5];strncpy(a,b,3);編譯器提示出錯,是由於a是一個字符串常量。 5.不要覺得讀取一行就用戶gets(),當一行的輸入太長,也會溢出,這時只能用fgets(); 6.關於char 類型, ansi規定了一個缺省的範圍是0 ~ 127 。可是不一樣的編譯器默認的char 範圍是不一樣的,多是默認爲unsigned char ,多是signed char,具體由編譯器決定,但C的庫函數的不少參數都是char,這就可能會出現移植性與效率方面的差別,因此,最好是把char 的範圍控制在unsigned 與 signed之間, 也就是ansi規定的一個缺省。另外,字符類型的本質仍是一個整型。
相關文章
相關標籤/搜索