我是c语言初学者,为什么下面的结果是a=10,b=20;而不是a=20,b=10;
#include <stdio.h>
void SWAP(int x,int y);
void swap(int *x,int *y);
void main()
{
int a=10,b=20;
SWAP(a,b);
printf(“%d,%d\n”,a,b);
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
void SWAP(int x,int y)
{
swap(&x,&y);
}
>> 本文固定链接: http://www.vcgood.com/archives/2630
其实想传引用调用下面着个代码就可以了
#include <stdio.h>
void swap(int *x,int *y);
void main()
{
int a=10,b=20;
swap(&a,&b);
printf(“%d,%d\n”,a,b);
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
但是我也不明白为什么多加了一层就不行了 还是等高人吧
哦,这是一道考题,还是谢谢你!
我认为关键的是这两句代码:
swap(&x,&y);和void swap(int *x,int *y);
程序执行swap(&x,&y)时传递的是变量a和b的地址,而void swap(int *x,int *y);声明的是指针。因为指针指向地址,所以可以看做swap(&x,&y)传递的是指向变量a和b的指针。
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
这段程序中的x和y应该是&a和&b,*x和*y就应该是*(&a)和*(&b),也就是a和b。下面就是temp=a;a=b;b=temp;函数中交换数据并不影响主函数中变量的值。
调试了半天,我就得出了这个结论。有错误的话还请指出。
先谢谢你,不过按你的这种说法,下面这段程序也交换不了数据了:
#include <stdio.h>
void swap(int *x,int *y);
void main()
{
int a=10,b=20;
swap(&a,&b);
printf(“%d,%d\n”,a,b);
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
我后来想了想,如果单看下面的程序
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
void SWAP(int x,int y)
{
swap(&x,&y);
}
姑且把SWAP看做主函数,函数swap调用结束后,*x,*y的值确实换了,关键是main函数调用SWAP结束后,x,y不复存在(已释放)。所以问题关键是main函数中的实参是a,b;
而并非指针!
我亦不知对不对,希望指出!
值是交换了,不过交换的是函数定义中的局部变量 x,y。
修改函数
swap(&x,&y);
}