指標引發的乙個傳值和傳址的問題

2022-07-10 02:57:13 字數 645 閱讀 5095

今天在編寫程式時遇上了這個問題,記錄如下。

乙個二叉排序樹的搜尋演算法:

最初**

1

intsearch_binarytree(bintree bt, keytype key, bitnode

*p, bitnode

*pf)214

else

15 19}

20return0;

21}

結果在執行是出現了訪問的錯誤。

分析:傳入的引數雖是指標型別,但在函式內部改變了這個指標的值。

這便和基本型別的變數作為引數傳遞給函式時類似,只是乙個傳值的過程,在函式過程中對該變數的修改不會被儲存。 

按傳址方式(指向指標的指標)修改後執行正常:

指向指標的指標作為引數

int

search_binarytree(bintree bt, keytype key, bitnode

**p, bitnode

**pf)

else

}return0;

}

稍作總結,在指標做引數傳遞給函式的時候:只能保留指標指向的物件改變的值。不能保留指標本身所做得修改。在需要修改指標本身的時候,需使用指向指標的指標作為引數。也便是傳值與傳址的差別所在。

傳指標和傳引用的乙個問題

int main class tree tree tree node root void tree add node root,node node void tree add int data 在這裡並不能完成預定的目標,在首次執行完add方法後,this root的值依然為null,並不是我們想象...

函式呼叫的傳值和「傳址」

函式呼叫的傳值和 傳址 以下文字只想說明乙個問題 所有的引數傳遞都是傳值 要想通過函式改變乙個變數的值,只有將此變數的位址傳入函式。其實c語言中根本沒有傳址這一 說,所有的函式在傳遞引數時都是採用的傳值呼叫,即在呼叫時完成 實參對形參的賦值,也就是說在傳遞引數時永遠都是將實參的值傳遞給形參。形參是乙...

c語言的傳值和傳址

我們都知道c語言中函式傳參有兩種方式 傳值和傳址 傳值 實參把值傳給形參,但沒有傳位址,即對實參的修改無效 生成臨時變數 核心原理 函式會對形參和中間變數重新分配空間 void swap int pleft,int pright 優點 安全 函式的 不會影響外部實參 區域性變數值的交換對主函式的變數...