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

2021-07-31 05:11:41 字數 1128 閱讀 8174

總是不懂指標 看了乙個csdn的問題 豁然開朗

在寫乙個棧的東西,在銷毀的時候有點小問題

#define position int

#define size_t int

#define elemtype char

#define buttom -1

struct ststack ;

typedef struct ststack *pseqstack;

如果這樣寫:

int destroy(pseqstack *pstack)

free

((*pstack)->buffer);

free

(*pstack);

*pstack=null;

return 1;

}int

main

()這樣寫是完全沒問題的

但是——

intdestroy

(pseqstack pstack)

free

((pstack)->buffer);

free

(pstack);

pstack=null;

return 1;

}int

main

()這樣在printstack

(stack);的時候就會出錯

通過除錯,發現stack的值居然還不為null!但是如果用第乙個的話就可以。

請大神來解釋下好麼?

更多 0

其中乙個回答:

你需要了解的是指標本身也是乙個變數,其值是乙個位址,注意這個位址是指標指向變數的位址,不是指標自己變數的位址,所以如果以指標作函式引數,那麼形參和實參都是乙個位址,都指向同乙個變數(被實參指標指向的變數),可以通過這個位址改變被指向變數的值,但若你修改形參指標本身的值,實參指標並不會得到修改。

因為實參指標與形參指標是兩個不同的變數,佔據不同的記憶體位置,只不過傳入引數時使這兩個變數具有相同的值(被指向變數的位址)。

所以,如果你想修改乙個變數,請傳遞此變數的位址(指標)。如果你想修改乙個指標本身,請傳遞此指標的位址,也就是指標的指標,即二級指標。

所以說「傳遞指標 只能改變指標的內容,卻不能改變指標本身」

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

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

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

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

分析傳遞指標的指標

很多人都應該記得一道很經典的c的面試題 void newstring char arga 看到這個題目大家都應該知道答案,並能說出理由是 在傳遞過程中引數會在棧上做乙個複製品,在函式體內進行操作的是這個複製品。這也就時我們為什麼在休要修改乙個變數值是要傳遞指標的原因了。如圖所示 我們這時操作的是ar...