C++ Primer 學(xué)習(xí)筆記一
A .基本類(lèi)型要點(diǎn):1. 結(jié)構(gòu)體:c++在處理結(jié)構(gòu)體時(shí),是按照一般的變量進(jìn)行處理的。結(jié)構(gòu)體可以作為函數(shù)參數(shù)和返回值。作為函數(shù)參數(shù)時(shí),也分傳值和傳引用的區(qū)別,而作為返回值時(shí),返回的是結(jié)構(gòu)體的一個(gè)拷貝??梢詫⒁粋€(gè)結(jié)構(gòu)賦給另外一個(gè)結(jié)構(gòu)。
2. 枚舉: 枚舉量是整型,可以被提升為Int類(lèi)型,但是int不能自動(dòng)轉(zhuǎn)換為枚舉類(lèi)型; 還有沒(méi)有為枚舉定義操作符+; 如果Int值是有效的,可以通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換,把它賦給枚舉變量; 顯示設(shè)置枚舉值時(shí),指定的值必須是整數(shù); 枚舉的取值范圍為大于最大值得、最小的2的冪-1。例如enum bigstep{one=1,two=2,third=100}; 則bigstep的取值范圍為0~127。
3. int *p1,p2;將創(chuàng)建一個(gè)指針和一個(gè)常規(guī)的int變量。
4. c++在創(chuàng)建指針時(shí),計(jì)算機(jī)將分配用來(lái)存儲(chǔ)地址的內(nèi)存,但不會(huì)分配用來(lái)存儲(chǔ)指針?biāo)赶虻臄?shù)據(jù)的內(nèi)存。
5. 如果要將數(shù)字值作為地址來(lái)使用,應(yīng)通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換將數(shù)字轉(zhuǎn)換為適當(dāng)?shù)牡刂奉?lèi)型。
6. c++中,值為0的指針為空指針。確??罩羔槻粫?huì)指向有效的數(shù)據(jù)。
7. 不要嘗試釋放已經(jīng)釋放的內(nèi)存塊,但是對(duì)空指針使用delete是安全的。所以盡量不要?jiǎng)?chuàng)建2個(gè)指向同一個(gè)內(nèi)存塊的指針。
8. 不能使用sizeof操作符來(lái)確定動(dòng)態(tài)分配的數(shù)組包含的字節(jié)數(shù)!?。?、
9. 數(shù)組和指針的區(qū)別:1.數(shù)組名是指針,可以對(duì)指針進(jìn)行+(-)操作,但是數(shù)組名不可以; 2.對(duì)數(shù)組應(yīng)用sizeof得到的是數(shù)組的長(zhǎng)度,而對(duì)指針應(yīng)用得到的是指針的長(zhǎng)度。
10. 如果給cout提供一個(gè)指針,它將打印地址。但如果指針的類(lèi)型為char *,則cout將顯示指向的字符串。如果要顯示字符串的地址,則必須將這種指針強(qiáng)制轉(zhuǎn)換為另外一種指針類(lèi)型,如Int *。
B .循環(huán)和關(guān)系表達(dá)式:
1. 遞增和遞減操作符在同一個(gè)值中使用多次時(shí),因?yàn)槊總€(gè)編譯器很可能對(duì)于“使用后修改”和“修改后使用”的規(guī)則可能不同,因此可能導(dǎo)致在不同的編譯器下得到不同的結(jié)果。
2. c++規(guī)定,在使用遞增或者遞減時(shí),確定一個(gè)完整表達(dá)式(它是這樣一個(gè)表達(dá)式,不是另一個(gè)更大表達(dá)式的子表達(dá)式),每個(gè)完整表達(dá)式完了,在下一個(gè)開(kāi)始之前,都要評(píng)估一次。例如:while(guest++<10) printf("%d",guest); 其中的guest++<10是一個(gè)完整表達(dá)式,一次在第一次printf的之前,要評(píng)估一次,這樣打出來(lái)的guest已經(jīng)加一; 再如,y=(4+x++)+(6+x++);,顯然整個(gè)句子才是一個(gè)完整表達(dá)式,c++只保證在執(zhí)行下一條語(yǔ)句之前,x+2,但是沒(méi)有規(guī)定是在計(jì)算每個(gè)子表示式之后將x遞增還是在整個(gè)表達(dá)式計(jì)算完畢之后才將x的值遞增!這個(gè)時(shí)候跟編譯器有關(guān),所以盡量避免使用這樣的句子。
3. *和++同時(shí)作用于指針時(shí),取決于優(yōu)先級(jí)。前綴指針和*的優(yōu)先級(jí)同,從右到左結(jié)合。后綴比*(還有前綴)優(yōu)先級(jí)高。
4. c++為類(lèi)型建立別名的方式有兩種:1.預(yù)處理器 #define BYTE char 2.使用typedef typedef char BYTE; 最好使用typedef.
C .分支語(yǔ)句和邏輯操作符:
- switch(integer-expression){} 中的判斷表達(dá)式必須為一個(gè)結(jié)果為整數(shù)的表達(dá)式。因此switch不能處理浮點(diǎn)測(cè)試。都是整數(shù)時(shí),如果選項(xiàng)超過(guò)2個(gè),switch的效率比if else高。
D .函數(shù)
1. 在c++中,void test();與void test(void)是等效的,意味著函數(shù)沒(méi)有參數(shù)。argument--實(shí)參 parameter--形參
2. 在c++中,當(dāng)且僅當(dāng)用于函數(shù)參數(shù)時(shí),int *arr和int arr[]的含義是相同的,它們都意味著arr是一個(gè)int指針。
3. int age=39; const int *p=&age; 后邊的聲明表示p指向一個(gè)const int(這里為39),因此不能使用pt來(lái)修改這個(gè)值。即*p=31;這個(gè)語(yǔ)句是不合法的。我們能通過(guò)修改age=23;來(lái)改變age的值,但是這個(gè)時(shí)候*p仍然為39!!也就是const int *p一旦指定一個(gè)值后,*p的內(nèi)容將不改變,即不能通過(guò)*p改變值。
4. 將const的地址賦給常規(guī)指針是不可行的。后邊再詳細(xì)討論下const+指針的情況。
5. 獲取函數(shù)的地址很簡(jiǎn)單:只要使用函數(shù)名即可,不跟參數(shù)。聲明函數(shù)指針時(shí)應(yīng)該指定函數(shù)的返回類(lèi)型及函數(shù)的參數(shù)列表。例如一個(gè)函數(shù)的原型為 double pam(int); 則其對(duì)應(yīng)的函數(shù)指針的聲明為:double (*pPam)(int); pPam就是函數(shù)pam的函數(shù)指針。則我們現(xiàn)在可以賦值 pf=pPam; 然后就可以使用這個(gè)函數(shù)指針來(lái)調(diào)用函數(shù)了。例如:double r=(*pPam)(5);或者double r=pPam(5);
posted on 2008-03-11 13:52 弱水一瓢 閱讀(219) 評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi): C++ Primer