指針的用途

(1)可以提高程序的編譯效率和執(zhí)行速度,使程序更加簡潔。

(2)通過指針被調(diào)用函數(shù)可以向調(diào)用函數(shù)處返回除正常的返回值之外的其他數(shù)據(jù),從而實(shí)現(xiàn)兩者間的雙向通信。

(3)利用指針可以實(shí)現(xiàn)動態(tài)內(nèi)存分配。

(4)指針還用于表示和實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu),從而為編寫出更加高質(zhì)量的程序奠定基礎(chǔ)。

(5)利用指針可以直接操縱內(nèi)存地址,從而可以完成和匯編語言類似的工作。

(6)更容易實(shí)現(xiàn)函數(shù)的編寫和調(diào)用

C語言中的指針

C語言中的指針

通過指針來分配一個(gè)地址

*(地址),是去讀地址里面存的東西。假設(shè)m=&q,我們可以用***m去訪問i的值。如果*后面接的不是地址,這個(gè)量也會被認(rèn)為是地址,執(zhí)行*運(yùn)算后,就會不知道指向哪里,就有亂碼之類的情況出現(xiàn)。

簡單言之,*m取值10101010,&q取地址0X12345678

例如在32位機(jī)中:

32/8=4B


理論上的尋址空間

BUS 數(shù)據(jù)總線+地址總線+控制總線

一個(gè)具有20位地址和32位字長的存儲器,問該存儲器能儲存字節(jié)信息4m,尋址空間為1m

int *p,i ; p=&i ;

這一句告訴計(jì)算機(jī)有一個(gè)指針p , 它指向 i 所占的4個(gè)字節(jié)的第一位,由于提前告訴計(jì)算機(jī),我這個(gè)是int型指針,計(jì)算機(jī)就知道p指向的變量到底有多長,所以當(dāng)執(zhí)行p+1時(shí),這個(gè)時(shí)候計(jì)算機(jī)就知道要跳過4個(gè)字節(jié)。

二級指針——指向指針的指針

作用:首先主要在數(shù)據(jù)結(jié)構(gòu)之中當(dāng)改變指針的時(shí)候就需要通過改變指針的指針的值來改變!

在數(shù)據(jù)結(jié)構(gòu)中用處很廣.最普遍的比如說鏈表,通過調(diào)用函數(shù)改變了鏈表中的元素,那么整個(gè)鏈表就發(fā)生了變化,這種情況下就會用到二級指針

q=&p

q里面存的是p指針?biāo)诘牡刂罚驗(yàn)閕nt *p是會給指針p分配一個(gè)地址,這個(gè)地址里面,存著地址A。

*q就是查看&p這個(gè)地址里面存的到底是什么內(nèi)容。這里的話就會發(fā)現(xiàn),它存的是地址A。

那么**q就等同于*p,而*p又表示 i 的內(nèi)容。


三級指針

假設(shè) a、p1、p2、p3 的地址分別是 0X00A0、0X1000、0X2000、0X3000,它們之間的關(guān)系可以用下圖來描述:

方框里面是變量本身的值,方框下面是變量的地址。

***p3等價(jià)于*(*(*p3))。一級指針*p3 得到的是 p2 的值,也即 p1 的地址;二級指針*(*p3) 得到的是 p1 的值,也即 a 的地址;經(jīng)過三次“取值”操作后,三級指針*(*(*p3)) 得到的才是 a 的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容