天天看點

《寫給大家的看的C語言書》筆記

最近為了學習C語言,看了一本C的入門書,即《寫給大家的看的C語言書》。

這本書非常通俗易懂,全書32章,每章都很短,個人覺得很适合初學者。

下面是摘抄的一些筆記,供自己以後複習用。

============================= chapter03 ============================= 

printf不同資料類型時的格式符: 

    %c      列印字元 

    %s      列印字元串 

    %d      列印數字(整數) 

    %.2f    列印小數(.2表示列印2位小數)    

=====================================================================

============================= chapter04 ============================= 

代碼中的注釋應盡量口語化,且有别于代碼。 

比如:(a<b)?a:b /* get the smaller of the 2 values */ 

============================= chapter05 ============================= 

1. C語言中字元串末尾是“null零”,“null零”是ASCII碼的第一個, 

    不是數字0,也不是字元‘0’ 

2. 字元串的長度不包括末尾的“null零” 

3. 定義字元串時要在末尾預留一個“null零”的空間(就是一個位元組) 

4. 定義字元串的時候同時進行初始化操作的話,可以不必指定字元數組的長度, 

    編譯器會自動計算長度,同時在最後加個“null零” 

    比如: char str[] = "abcdef" 

============================= chapter09 ============================= 

每次指派運算本身也會産生一個值 

比如: i=9 這個表達式本身本身也為9, 

    是以可以進行多重指派, j=k=l=i=9 或 a=3*(b=2) 

============================= chapter10 ============================= 

進行比較運算時,比較表達式本身的值有兩種: 

    比如(9==8)的值為0,即為假 

    比如(9==9)的值為1,即為真 

============================= chapter13 ============================= 

字元串長度和字元串大小是不同的概念: 

字元串長度:不包括字元串末尾的null零,通過strlen()來擷取 

字元串大小:存儲字元串所占字元數,包括null零,通過sizeof()擷取 

============================= chapter16 ============================= 

如果要在printf中輸出%,需要2個%% 

比如 printf("%%"); 會輸出 % 

============================= chapter17 ============================= 

switch 語句可用exit(1)退出 

switch 變量用整型或字元型變量,不要用float和double 

============================= chapter18 ============================= 

讀取一個字元用 getchar(), 它是帶緩沖的輸入,直至輸入Enter鍵,才實際寫 

入變量 

getch()是不帶緩沖的輸入,但是在fedora16下有點問題。??? 

============================= chapter19 ============================= 

gets()函數可以代替scanf()來接受字元串的輸入 

gets()函數會自動将Enter轉化為null零,然後将輸入的字元串儲存在指定變量中 

gets()函數還有個比scanf()優勢的地方是,gets()函數可以接受帶空格的字元串 

      scanf()函數遇到空格時相當于輸入已經結束 

puts()函數會在輸出的字元串末尾自動追加一個 '\n' 

============================= chapter20 ============================= 

産生随機數用 rand()函數 (可以産生 0 ~ 32767 内的任意整數) 

rand()産生的随機數每次都一樣, 

如果要産生真正的随機數,需要每次給與不同的種子,用 srand()函數産生種子。 

比如: srand(time); rand(); 

用目前時間作為srand()的參數,可以保證每次的種子是真正的随機 

============================= chapter21 ============================= 

定義字元串時,要在末尾預留一個null零 '\0', 否則列印時可能會有問題 

比如: char a[3] = { 'a', 'b', 'c' }; 是個字元數組,但不是字元串 

       char a[4] = { 'a', 'b', 'c', '\0' }; 是字元串 

       char a[3] = "abc"; printf("%s", a); 可能會出現預期以外的字元 

       char a[4] = "abc"; char a[] = "abc";都能正常顯示 

============================= chapter24 ============================= 

* 不是指針變量的一部分 

定義時: * 表示變量是個指針變量。 

        比如: int *ptr; 變量名是ptr 

取值時: * 表示取出指針變量中存放的位址所指向的值。 

        比如:printf(" %d", *ptr); 表示列印ptr所指向的值 

============================= chapter25 ============================= 

數組名雖然是一個指針,但是它不能被改變,是以相當于一個指針常量。 

即 數組名不能出現在指派運算的左邊。 

字元指針指派有一點需要注意:不要讓程式存儲比字元指針指向的第一個字元串 

更長的字元串。 

比如: char *pname = "harry poter"; gets(pname); 

    第二句gets() 存在風險,當輸入的長度比"harry poter" 長的時候 

    有可能會覆寫其他資料。 

============================= chapter26 ============================= 

malloc() 函數用于配置設定堆記憶體。 

    malloc() 預設傳回字元型指針,是以如果配置設定char型以外的堆記憶體,需要轉型 

    比如:配置設定10個int型大小的堆記憶體空間, 

          int *ptr; 

          ptr = (int *)malloc( 10 * sizeof(int)); 

free() 函數用于釋放已經配置設定的堆記憶體 

============================= chapter27 ============================= 

結構體的定義必須在定義結構體變量之前 

============================= chapter28 ============================= 

打開檔案的方法: 

    FILE *fptr; 

    fptr = fopen(filepath, "r/w/a"); 

    fclose(fptr); 

fprintf()函數可用于寫入檔案, 

與printf()函數不同之處在于多了一個檔案指針的參數。 

fgets()函數和gets()不同之處在于要給出輸入的長度。 

還有以下2點要注意: 

1. 用于讀取檔案 

2. 遇到'\n'或者到達給出的長度時結束輸入 

feof(fptr)用于判斷檔案是否讀完 

============================= chapter30 ============================= 

fseek()可以改變檔案指針的位置,使得可以局部修改檔案。 

用"r+/w+/a+"模式打開的檔案可以随機通路。 

本文轉自wang_yb部落格園部落格,原文連結:http://www.cnblogs.com/wang_yb/archive/2012/07/19/2598688.html,如需轉載請自行聯系原作者

繼續閱讀