帮忙检查下错误!!

来源:百度知道 编辑:UC知道 时间:2024/06/19 08:42:16
#include <stdio.h>

int main()
{ int a=3,b=5;
int swap(int x,int y);

printf("%d %d\n",swap(a,b));
getch();
}

int swap(int x,int y)

{
int t;
t=x,x=y,y=t;
return (x,y);
}

编译的结果是3 2372

错误真不少,首先函数声明不要放在main函数里面;其次printf输出2个int型数据,但是你只有一个数据作为输出,少一个;return (x,y)返回的是y的值,逗号运算符返回的是最后的数据,所以swap把x=3,y=5交换以后返回y=3的数值,然后printf输出第一个数据为3,由于你没有制定第二个数据,所以第二个数据的输出无法确定,可能是一个内存地址(这个我不太确定,请达人解答)。
看你程序的意思是想通过函数交换a、b数值,这么做是典型的传值调用,无法交换a、b的值,应该传地址才能真正交换a,b的数值。
按照传地址方式交换,我给你改好了
#include <stdio.h>
swap(int *x,int *y);
int main()
{ int a=3,b=5;

swap(&a,&b);
printf("%d %d\n",a,b);
getch();
}

swap(int *x,int *y)

{
int t;
t=*x,*x=*y,*y=t;

}
你原来的程序传得数据只是把a、b的数值分别付给了x、y,在swap函数中只交换了x,y的数值,a、b的数值并没有交换,所以要传a、b的数据地址,交换了地址中的数据,a、b才会互换,要是还不明白baidu搜索传值调用很多资料说得很明白

把值传递改成地址传递或者引用传递
而且return (x,y)这种写法是错的.

void swap(int *x,int *y)
{
int t=*x;
*x=*y;
*y=t;
}

sway(&a,&b);
printf("%d %d\n",a,b);

或者
void swap(int &x,int &y)
{
int t=x;
x=y;
y=t;
}