關於指標傳遞和指標的指標

2021-09-11 13:28:52 字數 1185 閱讀 4847

一開始沒有理解,導致對這個概念非常的模糊和不解。最近看完《 徹底搞定c語言指標詳解》,裡面關於指標的指標的解釋有了頓悟感。 其實,很好理解,是我把它想複雜了。 我們都知道,實參和形參的區別。形參並無法改變實參,這就是值傳遞。還有一種叫指標傳遞,實質就是去操作指標的指向物件。例子如下:

exchg2(int *px, int *py)

main

()複製**

這時候列印出來的結果是什麼呢? a=6,b=4 px = 6, py =4 為什麼? exchg2這個函式的引數是兩個int型指標,是位址,所以你要用&取a和b的位址傳入。在exchg2的函式內部,兩個指標所指向的值交換了,因為之前你已經把a和b的位址傳遞給了px和py這兩個指標,所以現在操作px和py指向的值,也會導致a和b所指向的值發生變化。

這個雖然饒了些,但還是勉強能理解。那麼,如果是指標的指標呢? 如下: 這個函式本意是為傳入的字串開闢空間,但是仔細看,它真的達到了這個效果嗎?

void getmemory(char *p, int num)

main(int argc, _tchar* ar**)

複製**

顯然不能,為什麼?這其實和值傳遞是乙個意思,你傳遞進來的是乙個指標實參str,而函式的形參p去替換了實參,所以後面操作的都是形參而已,並不會對實參有影響。這就不符合我們要求了啊,那怎麼辦?上乙個例子,我們傳入實參的位址,然後交換位址指向的值,來達到我們交換實參的目的,那麼在這邊我們也可以這麼幹啊。

void getmeory(char **p, int num)

int _tmain(int argc, _tchar* ar**)

複製**

這不就是把str的位址&str傳入了getmeory函式內嘛,只不過這個str本身也是乙個指標,管它呢,還有就是getmeory中的引數變成了char **p,這也很好理解,我傳入的是指標的指標,如果你還是只用指標char *p來接收的話,不就也只是操作形參了和值傳遞沒區別了啊。我要操作的是實參指標,所以形參必須是實參的指標,也就是char **, 好繞口,不過 不難理解,你想想為什麼值傳遞沒有改變實參就知道了。

最後我們改變的是p,也就是形參char **p的值,因為是取值符。指的是**p指向的值,也就是乙個位址,是指標。和指標傳遞的那個例子不同,那個例子是為了交換兩者指向的值,所以要看你想實現什麼,來決定操作什麼值。

傳遞指標和傳遞指標的指標

總是不懂指標 看了乙個csdn的問題 豁然開朗 在寫乙個棧的東西,在銷毀的時候有點小問題 define position int define size t int define elemtype char define buttom 1 struct ststack typedef struct ...

關於指標傳遞和指標的引用傳遞

指標傳遞的實質 指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。引用傳遞的實質 在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開...

關於 指標的引用和指標值傳遞

1,形參是實參的拷貝 值一樣,儲存位址不一樣 包括指標變數,指標變數 int p a p只是儲存位址的變數。請欣賞第一段 回答輸出結果 18分 include includeusing namespace std void try change int p int b 7 p b cout p 說是...