就是把值傳出去(
地址是變數在記憶體的位置,我們假設都在中山路上好了
上圖的原始碼如下:
people A房子 = 5 ; //A房子裡面有5個人 people B房子 = 1 ; //B房子裡面有1個人 B房子 = A房子; //B房子的內容跟A房子要一樣傳值最常用,也最簡單,就只是把A變數的值傳達給B變數
傳址(Call by Value of Pointer or Call by Address):
這就比較特別了,觀念很簡單:指向一個物件,存放另一個物件的位址(c++ primer 4/e p.115),從字面上的意思是「把我的地址丟給你」,同樣圖解比較清楚:
為了讓B房子是用來存放地址,宣告B房子時,我們會在他的名字前加個*,表示B房子只是存地址之用
上圖的原始碼如下:
people A房子 = 5 ; //A房子裡面有5個人 people *B房子 ; //B房子是個存放地址的變數 B房子 = &A房子; //B房子的地址跟A房子要一樣&的意思是取的A房子的地址,叫做「取址運算子 &」
要拿到門牌號碼做什麼用?這好處可多的勒!如此一來B房子就等於是A房子的分身。
如此一來,我們只要更動B房子就會連帶更動A房子的東西。其中*B房子=2中的*稱作提領運算子
原始碼如下:
people A房子 = 5 ; //A房子裡面有5個人 people* B房子 ; //B房子是個存放地址的變數 B房子 = &A房子; //B房子的地址跟A房子要一樣 *B房子 = 2; //B房子指定的地址,他們家的人只有兩個人 B房子 = 0; //B房子不指向任何地址
傳址案例:
第一行顯示: x=3 沒問題
第二行顯示: x的位址
第三行顯示: y的位址(因為他是指標變數不用加上&)
第四行顯示: y儲存x的位址
傳參考(Call by Reference):
參考(參照)的作用,就是讓物件取一個別名(alias),會在變數前面加上一個「&」
people A房子 = 5 ; //A房子裡面有5個人 people &B房子 = A房子 ; //B房子為A房子的別名
可以發現,B跟A根本就是一樣的東西,只是名稱不同而已,因此我們對B進行修改,A也會跟著修改。
B房子 = 100 ; //B房子裡面有100個人 cout >> A ; //A房子也會變成100個人
參考教學:
筆記那克斯的學習筆記
http://disp.cc/b/Knuckles_note#11-Lw
http://disp.cc/b/Knuckles_note#11-LH
http://disp.cc/b/Knuckles_note#11-M5