当前位置: 代码迷 >> C语言 >> 关于值得交换(为什么)
  详细解决方案

关于值得交换(为什么)

热度:122   发布时间:2008-03-20 11:56:50.0
关于值得交换(为什么)
main()
{
  int a,b;
printf("a=%d,b=%d\n",a,b);
swap(a,b)
printf("after swap\t a=%d,b=%d",a,b);
}
swap(int x,int y)
{
int temp;
temp=x;
  x=y;
  y=temp;
}
为什么这样做a,b的值没有发生交换?
----------------解决方案--------------------------------------------------------
这是关于函数的形参与实参与返回值的问题。函数的值传递是单向的,实参只能传递值给形参,形参不能传递值回实参,只能以返回值的形式传递给主调函数一个值。
    如果想交换两数值,最好用指针,那样就可以交换成功了。如果还不想用指针,就不要用交换函数,直接在主函数里面交换,就可以了。
----------------解决方案--------------------------------------------------------
传递的并非同一段地址,也就是单向传递.

/*这样就改变了*/
#include<stdio.h>
main()
{
  int a,b;
  scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("after swap\t a=%d,b=%d",a,b);
}
swap(int *x,int *y)
{
int temp;
temp=*x;
  *x=*y;
  *y=temp;
}
----------------解决方案--------------------------------------------------------
在调用涵数中变量改变了,即只在此处交换值,回到主涵数新值会丢失而重新使用旧值.
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]xianshizhe111[/un] 在 2008-3-20 12:10 的发言:[/bo]

传递的并非同一段地址,也就是单向传递.

/*这样就改变了*/
#include
main()
{
  int a,b;
  scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("after swap\t a=%d,b=%d",a,b);
}
swap(int *x,i ...

顶,相当好,指针就是灵活
----------------解决方案--------------------------------------------------------
你交换的只是栈上参数。
----------------解决方案--------------------------------------------------------
  相关解决方案