一:先看代码 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