總是不懂指標 看了乙個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...