作者grayyoung (灰狼)
看板C_and_CPP
標題Re: [問題] 試舉例說明何謂傳值呼叫.傳址呼叫.傳參 …
時間Tue Jul 28 17:35:49 2009
※ 引述《f4upig (sn)》之銘言:
: 等等要考試了,麻煩各大大可以趕緊幫忙?
雖然是說我猜你已經考完了
不過不知道這篇文章對你還有沒有幫助
這是以前我們考試前 我整理給同學看的
http://www.wretch.cc/blog/grayyoung/4607287
#include <iostream.h>
void test_value(int); /*引數為傳值呼叫的function*/
void test_add(int&); /*引數為傳址呼叫的function*/
int main(){
int a=5,b=5;
/*定義a,b為整數型態 (等下a給傳值用function b給傳址function用)*/
/*a,b皆為5*/
cout << "a的值: " << a << " a的址: " << &a << endl ; /*印出a的值和址*/
cout << "b的值: " << b << " b的址: " << &b << endl ; /*印出b的值和址*/
test_value(a) ; /*呼叫這個function 引數為傳值呼叫a*/
test_add(b) ; /*呼叫這個function 引數為傳址呼叫b*/
/*在做完function把5改成7後 再列一次a,b的值*/
cout << "a的值: " << a << " a的址: " << &a << endl ; /*印出a的值和址*/
cout << "b的值: " << b << " b的址: " << &b << endl ; /*印出b的值和址*/
cout << "我們發現b的值改變了 因為他跟y是同一位址 修改y會修改到b" << endl ;
cout << "但是a沒有改變 x只是讀他的值" ;
cout << "修改x只會修改x那個位址的值 對a沒有影響" << endl ;
return 0;
}
void test_value(int x){
/*用x來接收a的"址"*/
cout << "x的值: " << x << " x的址: " << &x << endl ; /*印出x的值和址*/
cout << "我們發現x的值和a的值一樣 但是址不一樣 因為是傳值呼叫" << endl ;
x = 7 ; /*更改x的值等於7*/
cout << "x的值: " << x << " x的址: " << &x << endl ; /*再一次印出x的值和址
*/
}
void test_add(int& y){
/*用y來接收b的"址"*/
cout << "y的值: " << y << " y的址: " << &y << endl ; /*印出y的值和址*/
cout << "我們發現y和b的值和址都一樣 因為是傳址呼叫" << endl ;
y = 7 ; /*更改y的值等於7*/
cout << "y的值: " << y << " y的址: " << &y << endl ; /*再一次印出y的值和址
*/
}
執行結果
a的值: 5 a的址: 0xbfbfec40
b的值: 5 b的址: 0xbfbfec3c
x的值: 5 x的址: 0xbfbfec10
我們發現x的值和a的值一樣 但是址不一樣 因為是傳值呼叫
執行x=7以後
x的值: 7 x的址: 0xbfbfec10
y的值: 5 y的址: 0xbfbfec3c
我們發現y和b的值和址都一樣 因為是傳址呼叫
執行y=7以後
y的值: 7 y的址: 0xbfbfec3c
a的值: 5 a的址: 0xbfbfec40
b的值: 7 b的址: 0xbfbfec3c
我們發現b的值改變了 因為他跟y是同一位址 修改y會修改到b
但是a沒有改變 x只是讀他的值修改x只會修改x那個位址的值 對a沒有影響
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.139.4
※ 編輯: grayyoung 來自: 140.113.139.4 (07/28 17:40)
※ 編輯: grayyoung 來自: 140.113.139.4 (07/28 17:42)
→ grayyoung:我後來知道應該要用By value 跟 By reference 比較準確 07/28 17:49
→ james732:#include <iostream.h> 嗯... 07/28 18:17
推 dendrobium:void test_add(int&); /* 這不是傳址@@a */ 07/28 18:57
推 dendrobium:不知道你同學考的怎麼樣@@? 07/28 18:59
推 VictorTom:有一種說法, 傳參考(ref)呼叫就是傳址(addr)呼叫; 07/28 19:59
→ VictorTom:把傳ptr當作傳址的不知道哪一本中文書開始自己寫的.... 07/28 19:59
→ VictorTom:那其實是傳值(value)呼叫; 所以他應該沒有寫錯.... 07/28 20:00
推 VictorTom:細節, 還是請去看 #135o9jpD 這一篇被m起來的文章:) 07/28 20:02
→ AGanPTT:= = 真的不懂上面那串字= = 07/28 20:41
推 VictorTom:把 #到D 整串複製, 在文章列表直接選貼上.... 07/28 21:20
→ VictorTom:簡單說就是PTT文章代碼功能, 避免貼文號容易跑掉的問題. 07/28 21:20
→ grayyoung:應該是說 07/28 21:34
→ grayyoung:By reference 中文翻成傳址呼叫 07/28 21:34
→ grayyoung:By value 翻成傳值呼叫 07/28 21:35
→ grayyoung:我那時候為了簡單起見 用add (address) 代表傳址 07/28 21:35
→ grayyoung:雖然是用原文書 可是老師上課還是會用中文 抱歉了Orz||| 07/28 21:36
→ grayyoung:假如有觀念上的錯誤 那還真糟糕 我在去看一下V大的文章 07/28 21:37
→ grayyoung:歐歐 所以其實我是名詞搞混 07/28 21:38
→ grayyoung:假如這篇add都改成reference的話應該就沒錯了對吧 07/28 21:39
→ grayyoung:我們老師沒有特別分出三種... = =" 07/28 21:39