现在的位置: 首页 > 综合 > 正文

指针剖析,地址关系 (三) 引用传递与非引用传递

2013年12月03日 ⁄ 综合 ⁄ 共 1042字 ⁄ 字号 评论关闭

一:先看代码  vim 14.c

 

 

 

#include <iostream>

using namespace std;

 

void fun1 (int r)

{

cout<<"r = "<<r <<endl;

cout<<"&r= "<<&r<<endl;

r++;

cout<<"r = "<<r <<endl;

}

void fun2 (int& r)

{

cout<<"r = "<<r <<endl;

cout<<"&r= "<<&r<<endl;

r++;

cout<<"r = "<<r <<endl;

}

 

int main()

{

int x =0;

int y =0;

cout<<" 输出调用无引用参数传递的函数fun1的结果"<<endl ;

cout<<" 调用fun1前x和其地址"<<endl;

cout<<"x = "<<x <<endl;

cout<<"&x= "<<&x<<endl;

cout<<" 调用fun1后"<<endl;

fun1(x);

cout<<"x = "<<x <<endl;

 

cout<<" 输出调用引用传递参数的函数fun2的结果:"<<endl;

cout<<" 调用fun2前y和其地址"<<endl;

cout<<"y = "<<y <<endl;

cout<<"&y= "<<&y<<endl;

cout<<" 调用fun2后"<<endl;

fun2(y);

cout<<"y = "<<y <<endl;

 

 

return 0;

}

二:编译代码  g++ 14.c -o 14
三:查看输出    cyq@cyq-desktop:~/桌面/C$ ./14
cyq@cyq-desktop:~/桌面/C$ ./14
 输出调用无引用参数传递的函数fun1的结果
 调用fun1前x和其地址
x = 0
&x= 0xbff6befc
 调用fun1后
r = 0
&r= 0xbff6bee0
r = 1
x = 0
 输出调用引用传递参数的函数fun2的结果:
 调用fun2前y和其地址
y = 0
&y= 0xbff6bef8
 调用fun2后
r = 0
&r= 0xbff6bef8
r = 1
y = 1
四:分析结果
从上面代码可以看出,fun1()函数,没有用引用传递参数。所以fun1()中的变量r是独立占用内存,它和传入的x地址不一样,虽然
在函数内修改了x的值,但函数执行完之后,x的值没变。
而  fun2()函数,传递的是引用参数,fun2()中的变量r和传入的y的地址是一样的。所以在函数内修改了y的值,函数执行完之后,
y的值被修改了。原因是他们共用一块地址。
这个程序还是很有意思的。

声明:本文档可以随意更改,但必须署名原作者

作者:凤凰舞者 qq:578989855

 

抱歉!评论已关闭.