C語(yǔ)言細(xì)節(jié)之指針
1播瞳、 后綴++和--比*的優(yōu)先級(jí)高理肺,所以*P++與*(P++)等價(jià)糙置。它自增P并返回P自增前所指向的變量數(shù)值云茸。
? ? 前綴++和--與*的優(yōu)先級(jí)相同,但是按從右向左結(jié)合谤饭。所以++*P與(*P)++等價(jià)标捺。
2、對(duì)于char *p;
? ? ? int a[10];
? ? ? P = a;
? ? ? 不可以使用((int *)P)++揉抵。因?yàn)?int *)p只可以作右值亡容。要達(dá)到目的可以用P = (char *)((int *)P + 1);
? ? ? 所以要注意,類型轉(zhuǎn)換只可以做右值冤今。
3闺兢、用指針調(diào)用函數(shù)的形式。
? ? int func(){}
? ? int (*fp)() = func;
? ? 既可以使用*fp()戏罢,也可以使用fp()調(diào)用函數(shù)func();
C語(yǔ)言細(xì)節(jié)之空指針
1屋谭、空指針表示"未分配"或者"尚未指向任何地方"。它與未初始化的指針不同龟糕,未初始化的指針可能指向任何地方桐磁。每種指針類型都要一個(gè)空指針,而不同類型的空指針的內(nèi)部可能不盡相同翩蘸。
2所意、一般給指針賦值0就是將指針設(shè)為空指針(等同設(shè)為NULL)。但是0作為函數(shù)參數(shù),傳給指針時(shí)需要對(duì)0作類型轉(zhuǎn)換扶踊。
3泄鹏、可以使用if(p)等同于if(p != 0),但是這種風(fēng)格不好。
4秧耗、NULL實(shí)際上是一個(gè)定義在 stdio.h中定義的宏备籽,代表空指針常數(shù),賦給指針分井,等同于0车猬。欲處理器把所有NULL都轉(zhuǎn)換為0
總結(jié):兩條規(guī)則:
? (1)當(dāng)需要使用空指針常數(shù),使用0或者NULL
? (2)當(dāng)在函數(shù)調(diào)用中使用0或者NULL用作參數(shù)尺锚,把它轉(zhuǎn)換成被調(diào)
? ? ? 函數(shù)需要的指針類型珠闰。