《數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)》
作者: [美]Ellis Horowitz 霍羅維茲
譯者: 朱仲濤
出版社: 清華大學(xué)出版社
ISBN: 9787302186960
在 豆瓣讀書 中查看本書
指針
- C允許指針做算數(shù)運(yùn)算,包括加減乘除湾碎。
- 指針之間可以做比較败明,結(jié)果返回大于猜欺、小于殊霞、相等三者之一诅挑。
- 指針還可以通過強(qiáng)制顯式地轉(zhuǎn)換成整數(shù)暂题。
- 指針變量的長度可以是不同值啥纸,指向char的指針變量也許比指向float的指針變量長度更長。
- C用特殊的值
NULL
表示空指針誓斥。對于具體系統(tǒng)只洒,空指針用整數(shù)值0
表示。C中NULL
是一個(gè)宏劳坑,具體實(shí)現(xiàn)就定義為常量值0
毕谴。空指針可用在關(guān)系表達(dá)式中距芬,表示布爾量“假”涝开,因而測試空指針的語句可以是:
if(p==NULL)
或者更簡潔:
if(!p)
動(dòng)態(tài)存儲(chǔ)分配
- 動(dòng)態(tài)存儲(chǔ)分配在系統(tǒng)堆(heap)中。
-
malloc
在程序中很常見框仔,方便的方法是一定宏語句舀武。一種實(shí)現(xiàn):
#define MALLOC(p,s)\
if( !(p)=malloc(s)) ){\
fprintf(stderr,"Insufficient memory");\
exit(EXIT_FAILURE);\
}
- 懸空引用(dangling reference):指向存儲(chǔ)空間A的指針被賦值后,指向存儲(chǔ)空間B离斩。存儲(chǔ)空間A中所存儲(chǔ)的值對程序而言银舱,就丟掉了。
- 好習(xí)慣:讓所有尚未指向?qū)嶋H目標(biāo)的指針都取
NULL
跛梗。以盡量避免訪問一塊尚未申請的空間寻馏,或訪問一塊無權(quán)訪問的空間。 - 好習(xí)慣:在轉(zhuǎn)換指針類型時(shí)核偿,顯式地使用強(qiáng)制類型轉(zhuǎn)換诚欠。
float * p=(float*)malloc(sizeof(float));
- 好習(xí)慣:明確指定函數(shù)的返回類型。很多系統(tǒng)中宪祥,指針類型的大小和
int
類型大小相同聂薪,函數(shù)返回類型沒有顯式定義家乘,int
返回類型以后可能被解釋為指針蝗羊。