解释一下运行结果
#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;
}
为什么运行结果是1010? 而不是105?
void f(int &m,int n)
传人地址用指针表示的话就相当于直接修改了传人的变量 但是 传人数值得话 并不会改变传人的变量
改成这样就好了
void f(int &m,int &n)
{int temp;
temp=m;
m=n;
n=temp;
}
原因应该是变量的生命周期,如果你用&是交换地址里面的值 void f(int &m,int n)
{int temp;
temp=m;
m=n;
n=temp;
}
int &m不是引用的意思吗? 如一楼所说应该改成这样
void f(int &m,int &n)
{int temp;
temp=m;
m=n;
n=temp;
}
原因呢就是引用其实就是一个指向变量本身的指针,当你改变这个值的时候,这个指针所指向的地址空间的值就会改变,如果没有这个引用&,你改变这个变量的值,但是指向这个变量的地址空间的值并没有改变,所以输出结果就是10,10,因为n没有用&,如果两个都不用引用类型,那么输出的结果任然是5,10,变量的值就不会改变。 #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;
}
页:
[1]