C语言 无返回值函数对变量实行操作时,为什么变量值没有改变?

就拿下面的程序来说吧,想要通过无返回值函数fun交换变量a,b,用DJGPP运行:
void fun(int a,int b)
{
int t;
t=a;a=b;b=t;
}
main()
{
int a=6,b=3;
fun(a,b);
printf("a=%d,b=%d",a,b);
}
为什么运行结果还是a=6,b=3而没有完成交换?

fun在stack生成a,b的copy,所以交换的是copy,不是main中的a,b。通过指针可以完成。
void fun(int * a,int * b)
{
int t;
t=*a;*a=*b;*b=t;
}
main()
{
int a=6,b=3;
fun(&a,&b);
printf("a=%d,b=%d",a,b);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-05-16
为什么就不说了,解决方法是通过指针调用参数。
第2个回答  2007-05-16
必须用指针对地址操作,才能完成这样的功能。看来你还是新手
你的函数没有,返回,那么a,b 只是内部变量局部,在主程序中,a,b 始终是他们自己

void fun(int a,int b)
{
int t;
t=&a;&a=&b;&b=t;
}
main()
{
int a=6,b=3;
fun(a,b);
printf("a=%d,b=%d",a,b);
}
第3个回答  2007-05-16
应该用引用调用
void fun(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
相似回答