作者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)
1F:→ grayyoung:我後来知道应该要用By value 跟 By reference 比较准确 07/28 17:49
2F:→ james732:#include <iostream.h> 嗯... 07/28 18:17
3F:推 dendrobium:void test_add(int&); /* 这不是传址@@a */ 07/28 18:57
4F:推 dendrobium:不知道你同学考的怎麽样@@? 07/28 18:59
5F:推 VictorTom:有一种说法, 传参考(ref)呼叫就是传址(addr)呼叫; 07/28 19:59
6F:→ VictorTom:把传ptr当作传址的不知道哪一本中文书开始自己写的.... 07/28 19:59
7F:→ VictorTom:那其实是传值(value)呼叫; 所以他应该没有写错.... 07/28 20:00
8F:推 VictorTom:细节, 还是请去看 #135o9jpD 这一篇被m起来的文章:) 07/28 20:02
9F:→ AGanPTT:= = 真的不懂上面那串字= = 07/28 20:41
10F:推 VictorTom:把 #到D 整串复制, 在文章列表直接选贴上.... 07/28 21:20
11F:→ VictorTom:简单说就是PTT文章代码功能, 避免贴文号容易跑掉的问题. 07/28 21:20
12F:→ grayyoung:应该是说 07/28 21:34
13F:→ grayyoung:By reference 中文翻成传址呼叫 07/28 21:34
14F:→ grayyoung:By value 翻成传值呼叫 07/28 21:35
15F:→ grayyoung:我那时候为了简单起见 用add (address) 代表传址 07/28 21:35
16F:→ grayyoung:虽然是用原文书 可是老师上课还是会用中文 抱歉了Orz||| 07/28 21:36
17F:→ grayyoung:假如有观念上的错误 那还真糟糕 我在去看一下V大的文章 07/28 21:37
18F:→ grayyoung:欧欧 所以其实我是名词搞混 07/28 21:38
19F:→ grayyoung:假如这篇add都改成reference的话应该就没错了对吧 07/28 21:39
20F:→ grayyoung:我们老师没有特别分出三种... = =" 07/28 21:39