看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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