最近為了學習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,如需轉載請自行聯系原作者