《C和指針》部分筆記
第一章 快速上手
1.從一個(gè)比較簡單的程序開始講解 “從標(biāo)準(zhǔn)輸入讀取文本并對(duì)其進(jìn)行修改,然后把它寫到標(biāo)準(zhǔn)輸出”
里面遇到幾個(gè)有意思的點(diǎn)
int ch;
//思考scanf的返回值
while( num < max && scanf( "%d", &columns[num] ) == 1 && columns[num] >= 0 )
num += 1;
while( (ch = getchar()) != EOF && ch != '\n' ) //為何ch要聲明為整型
;
- scanf函數(shù)的返回值是函數(shù)成功轉(zhuǎn)換并存儲(chǔ)與參數(shù)中的值的個(gè)數(shù)。
- getchar函數(shù)從標(biāo)準(zhǔn)輸入讀取一個(gè)字符并返回它的值。如果輸入中不再存在任何字符,函數(shù)就會(huì)返回常量EOF,用于提示文件的結(jié)尾。
- 為什么ch被聲明為一個(gè)整型?答案是EOF是一個(gè)整型值,它的數(shù)位比字符類型(char)要多,把ch聲明為整型可以防止從輸入讀取的字符意外地被解釋為EOF。同時(shí),也意味著接收字符的ch必須足夠大,足以容納EOF。
- 補(bǔ)充:字符在本質(zhì)上也是整型。
- 函數(shù)的傳值調(diào)用和傳址調(diào)用在后面的章節(jié)會(huì)講到,傳數(shù)組名其實(shí)也是傳值,因?yàn)閿?shù)組名是一個(gè)指針,所以就變成傳址了。
第二章 基本概念
1.環(huán)境:講編譯、鏈接、運(yùn)行。編譯環(huán)境、運(yùn)行環(huán)境不同,需要交叉編譯。
2.詞法規(guī)則:詞法規(guī)則就像英語中的拼寫規(guī)則,決定你在源程序中如何形成單獨(dú)的字符片段,也就是標(biāo)記(token)。C的令牌(token):可以是關(guān)鍵字、標(biāo)識(shí)符、常量、字符串值或者是一個(gè)符號(hào)。
第三章 數(shù)據(jù)
1.數(shù)據(jù)類型
graph LR
A[4種基本數(shù)據(jù)類型] --> B[整型]
A --> C[浮點(diǎn)型]
A --> D[指針]
A --> E[聚合類型]
B --> F[整型字面值]
B --> G[枚舉類型 enum聲明]
E --> H[數(shù)組 結(jié)構(gòu)等]
整型家族:9個(gè)
char、signed char、unsigned char;
short int、unsigned short int;
int、unsigned short int;
long int、unsigned long int。
字符串常量的直接值是一個(gè)指針
2.typedef:定義新類型的名字(區(qū)別#define)
typedef char *ptr_to_char; //把標(biāo)識(shí)符ptr_to_char聲明為作為字符指針類型的新名字
ptr_to_char a; //聲明a是一個(gè)指向字符的指針
3.常量 const關(guān)鍵字
int const *pt1; //可以修改指針本身,但是不能修改指向的值
int * const pt2; //指向整型的常量指針,指針本身不能修改
4.作用域
文件作用域、函數(shù)作用域、代碼塊作用域、原型作用域
原型作用域只適用于在函數(shù)原型中聲明的參數(shù)名,就是在函數(shù)聲明的參數(shù)名。
5.鏈接屬性
6.存儲(chǔ)類型
一定要理解作用域、鏈接屬性和存儲(chǔ)類型這三者的特點(diǎn)!!
最近很忙,后續(xù)再添加吧!!