鱼C论坛

 找回密码
 立即注册
查看: 2186|回复: 5

解释一下运行结果

[复制链接]
发表于 2014-3-19 21:19:14 | 显示全部楼层 |阅读模式
1鱼币
#include<iostream>
using namespace std;
void f(int &m,int n)
{  int temp;
   temp=m;
   m=n;
   n=temp;
}
int main()
{  int a=5,b=10;
f(a,b);
cout<<a<<"  "<<b<<endl;
return 0;
}
     为什么运行结果是10  10? 而不是10  5  ?

最佳答案

查看完整内容

void f(int &m,int n) 传人地址用指针表示的话就相当于直接修改了传人的变量 但是 传人数值得话 并不会改变传人的变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-19 21:19:15 | 显示全部楼层
void f(int &m,int n)
传人地址用指针表示的话就相当于直接修改了传人的变量 但是 传人数值得话 并不会改变传人的变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-19 21:42:50 | 显示全部楼层
改成这样就好了
void f(int &m,int &n)
{  int temp;
temp=m;
m=n;
n=temp;
}
原因应该是变量的生命周期,如果你用&是交换地址里面的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-19 22:15:36 | 显示全部楼层
void f(int &m,int n)
{  int temp;
    temp=m;
    m=n;
    n=temp;
}


int &m不是引用的意思吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-19 22:33:59 | 显示全部楼层
如一楼所说应该改成这样
void f(int &m,int &n)
{  int temp;
   temp=m;
   m=n;
   n=temp;
}
原因呢就是引用其实就是一个指向变量本身的指针,当你改变这个值的时候,这个指针所指向的地址空间的值就会改变,如果没有这个引用&,你改变这个变量的值,但是指向这个变量的地址空间的值并没有改变,所以输出结果就是10,10,因为n没有用&,如果两个都不用引用类型,那么输出的结果任然是5,10,变量的值就不会改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-20 12:07:35 | 显示全部楼层
#include<iostream>
using namespace std; 
void f(int &m,int n)
{  int temp;
   temp=m;
   m=n;
   n=temp;
}
int main()
{  int a=5,b=10;
f(a,b);
cout<<a<<"  "<<b<<endl;
return 0;
}
你看你的代码里面的函数定义
void f(int &m,int &n)
这样定义的花,传入函数的参数的只有一个是引用原值,另一个是原值的副本,改变副本是不会对原值有改变的,在函数执行完后,副本作用域消失。改成如下代码即可
#include<iostream>
using namespace std; 
void f(int &m,int &n)
{  int temp;
   temp=m;
   m=n;
   n=temp;
}
int main()
{  int a=5,b=10;
f(a,b);
cout<<a<<"  "<<b<<endl;
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 00:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表