(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語言中的指針
通過指針來分配一個(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指針?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 的值。