回 帖 发 新 帖 刷新版面

主题:有个简单程序   请教高手  急急急

#include <iostream>
void fun(int& x, int y) { int t = x; x = y; y = t; }
int main( )
{
int a[2] = {23, 42};
fun(a[1], a[0]);
std::cout << a[0] << ", " << a[1] << std::endl;
return 0;
}
为什么显示结果会是23,23

回复列表 (共6个回复)

沙发

改成“void fun(int x, int y)”就可以了

板凳

因为a[1]在函数传递中用int& x接,其值变为a[0],是23,而a[0]在函数传递中用int y接,其值在函数返回中不变,仍是原值23,所以结果都是23,"void fun(int &x, int &y)”就可以进行两个数的交换了。大概就这样.............

3 楼

&在C语言里是取地址的操作

4 楼

应该是&是引用符号,说明在子函数中对x的数值操作会同步改变在主函数中的x的值,而y没有引用符号,所以在子函数fun中对他的操作不影响他在主函数main中的值。所以最后是x变而y不变,即a[1]变而a[0]不变。

5 楼

#include <iostream>
void fun(int& x, int &y) { int t = x; x = y; y = t; }// 看这一行,把y 换成 &y ;
int main( )
{
int a[2] = {23, 42};
fun(a[1], a[0]);
std::cout << a[0] << ", " << a[1] << std::endl;
return 0;
}

这么简单的问题,哎,一看你这个程序就是交换两个值?

即使函数一定要用地址传参; 你上面一个用值传参,一个用地址传参,当然出错!

6 楼


#include <iostream>
using namespace std;
void fun(int& x, int &y) { int t = x; x = y; y = t; }
int main( )
{
int a[2] = {23, 42};
fun(a[0], a[1]);
cout << a[0] << ", " << a[1] << endl;
return 0;
}嗯,改成这样。

我来回复

您尚未登录,请登录后再回复。点此登录或注册