C++的指針知識可為及其重要的基礎(chǔ),如果不懂得指針的用法,那看C++的源碼程序就太難了。C++的指針知識是個難點(diǎn),必須克服的難點(diǎn)。
指針聲明:
1.每個數(shù)據(jù)類型都有指針類型
int* i
char* c
2.指針本來也是一種類型,指針可以對應(yīng)著指針類型即二級指針變量
int** i 即 (int*)* i【int指針類型的指針i】
3.一個*只能修飾一個指針
int* i,p 【i為指針,p為int變量】
要想一下聲明多個指針,則可以:int* i,*p
指針賦值:
1.指針也可以初始化,賦值或初始化的值是同類型實(shí)體(即實(shí)體變量)的地址
int i=10;
int* ip=&i (&表示實(shí)體的地址)
int* ipt=&10 是不可以的,10是實(shí)體,而不認(rèn)可具有空間地址(所以說是實(shí)體變量地址才有效)
2.指針直接賦實(shí)體值
int i=10;
int* ip=&i;
int* ipt=10 不可以,指針初始化必須是實(shí)體地址
*ip=20 可以,指針間訪操作
這里的*ip為什么能直接給實(shí)體值呢?
因?yàn)?ip是所指向?qū)嶓w地址的間訪操作,也就是指針指向?qū)嶓w的時候是可以讀寫操作的。其實(shí)這里還是賦值的地址。
3.空指針不能賦實(shí)體值
int* ip;
*ip=10 不可以
這里的*ip為什么又不能給實(shí)體值了呢?
因?yàn)檫@里的指針*ip沒有經(jīng)過初始化,*ip沒有指向?qū)嶓w,為空指針,則就不能讀寫了。
指針間的操作
當(dāng)指針指向具體實(shí)體后,指針也就有了具體的實(shí)體值和具體的空間地址,這時候就可以被二級指針?biāo)僮?
int i=10;
int* ip=&10;
int** iip=&ip;
理解了上面的指針賦值,那么其余的指針間操作就好操作了,必須理解清楚指針在各種情況下的表示。
給指針賦值,必須是個地址,各種形式的賦值只是表現(xiàn)出的形式不一樣,實(shí)際指針只能指向?qū)嶓w的地址。指針在賦值時必須是與指針類型相同的類型實(shí)體地址。但實(shí) 際的存儲空間的實(shí)體都是以二進(jìn)制數(shù)進(jìn)行存儲的,那么當(dāng)一個float的實(shí)體地址被一個int指針指向時,這個float實(shí)體就會被強(qiáng)制轉(zhuǎn)換為int實(shí)體, 那么數(shù)據(jù)就出現(xiàn)變動。這是危險的。我理解的是,指針不能在類型不同時進(jìn)行轉(zhuǎn)換。
今天就到此了,明天還要繼續(xù)。天,有點(diǎn)想發(fā)狂的沖動,還有指針運(yùn)算、限定、引用,函數(shù)指針。頭都要大了...