主题:有个简单程序 请教高手 急急急
jinxiaomiss
[专家分:0] 发布于 2009-10-02 10:59:00
#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
最后更新于:2009-10-02 12:14:00
回复列表 (共6个回复)
沙发
上帝变变变 [专家分:10] 发布于 2009-10-02 19:03:00
改成“void fun(int x, int y)”就可以了
板凳
上帝变变变 [专家分:10] 发布于 2009-10-02 19:16:00
因为a[1]在函数传递中用int& x接,其值变为a[0],是23,而a[0]在函数传递中用int y接,其值在函数返回中不变,仍是原值23,所以结果都是23,"void fun(int &x, int &y)”就可以进行两个数的交换了。大概就这样.............
3 楼
kaierme [专家分:970] 发布于 2009-10-02 23:03:00
&在C语言里是取地址的操作
4 楼
mhl1003 [专家分:110] 发布于 2009-10-07 01:23:00
应该是&是引用符号,说明在子函数中对x的数值操作会同步改变在主函数中的x的值,而y没有引用符号,所以在子函数fun中对他的操作不影响他在主函数main中的值。所以最后是x变而y不变,即a[1]变而a[0]不变。
5 楼
miaoyong [专家分:760] 发布于 2009-10-19 23:34:00
#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 楼
panshengzhipsz [专家分:160] 发布于 2009-10-21 13:28:00
#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;
}嗯,改成这样。
我来回复