c++函式的值傳遞和位址傳遞的區別
對於c++早期學習中指標的學習與運用可謂是難點與重點,雖然概念比較簡單(只是*p指向某乙個位址,通過指標形參可以獲取所指向位址的儲存資訊)但是就其的幾種基本使用形式,如果不花大把功夫初學者很難理解。
當函式的形參為基本型別變數、結構體型別變數、類型別變數時,函式的引數傳遞方式屬於值傳遞,實參為相應的變數、常量、表示式等。值傳遞是一種單向傳遞,只能把實參傳遞到形參,對形參操作不會影響實參的值.
void
fun1
(int
*x,int
*y)
函式fun1就是值傳遞,在這裡完全不必把它複雜化理解,x=y就是指標名稱的交換。(此處可以用筆略做推導就十分清楚了)呼叫函式1輸出的實參不變形參改變。值傳遞不會影響主函式實參的值。
當函式的形參是某種型別的指標時,實參為相應的位址時,函式引數傳遞的是位址。傳遞方式是位址傳遞,位址傳遞時實參也可以是儲存了某個位址的指標變數;既可以操作指標也可以操作指標所指向的記憶體空間。
void
fun2
(int
*x,int
*y)
函式fun2就是位址傳遞,*x=*y是指標的轉遞(就是對指標所指向的記憶體空間進行交換或傳遞)呼叫函式2時輸出結果形參和實參都發生了改變。
void
fun3
(int
*x,int
*y)
2.2:對位址傳遞稍作改進fun3:其實使用起來與fun1幾乎沒有差別,但是fun1是指標名稱交換指向不變,而fun3是指標指向改變而指標名稱不變。二者呼叫輸出結果一毛一樣。但屬於位址傳遞。
2.3:位址傳遞可能會改變主函式實參的值。
void
fun4
(int
*x,int
*y)
2.3:注意fun4編譯過程不會報錯,但是不能完成傳遞,不可選用這個方式傳遞。
3函式的引用傳遞定義:函式的引數是引用傳遞時,形參為某種型別的變數引用,實參為相應的變數。根據引用的概念,引用傳遞時,形參是對實參的重新命名,形參和實參是同一記憶體空間的兩個名稱。
如fun5,在呼叫fun5時,將變數a,b重新命名為x,y,現在a,x是同乙個記憶體空間的名稱,所以此時若a,b交換則x,y交換,x,y交換則a,b交換。
void
fun5
(int
&x,int
&y)
在這裡注意&x,&y,用的&是引用符合,不是取位址符合。並且引用傳遞中實參與形參必須是同型別的變數,不能是位址或常量或者其他型別的變數。引用傳遞會影響主函式的實參的值。
#include
using
namespace std;
void
fun1
(int
*x,int
*y)void
fun2
(int
*x,int
*y)void
fun3
(int
*x,int
*y)void
fun4
(int
*x,int
*y)void
fun5
(int
&x,int
&y)int
main()
C 函式位址傳遞和值傳遞區別
目錄 c 位址傳遞和值傳遞區別 1 位址傳遞vs值傳遞 2 演示 相當於通過尋找位址 傳遞,然後 解引用,修改變數的值。void swap int p1,int p2 swap a,b 呼叫值傳遞 之間進行形參內部的值的改變,不會改變實參,只會影響形參。相當於在函式內部做了賦值的操作。void sw...
C 值傳遞和位址傳遞
在c 呼叫函式時,會存在值傳遞和位址傳遞,也叫 傳引用和傳值 正好用到這方面內容,因此做個總結,加深一下理解,如果有不到位或者不準確的地方,請小夥伴們多指教。1 位址傳遞時,形參和實參是同乙個變數,即使用相同的記憶體空間,二者有相同的位址。而傳值時二者位址不同 2 位址傳遞時,由於沒有新建變數,所以...
函式引數的值傳遞和位址傳遞
利用乙個小例子說明,見 includevoid f1 int pp void f2 int pp 以上函式中,接收資料的參量都是pp,而不會是 pp或者 pp int f3 int pp int main void p a printf 1 d n p 開始值為4 f1 p printf 2 d n...