who帮我分析一下这两个个c程序区别

来源:百度知道 编辑:UC知道 时间:2024/05/14 19:11:40
下面的程序两者有什麽区别,我想不清楚,高手指点下
swap(int *a, int *b)
{
int *t ;
t=a,a=b,b=t;
printf("a=%d,b=%d\n",*a,*b);
}
main()
{
int x,y, *px=&x,*py=&y;
scanf("%d,%d',&x,&y);
printf("x=%d,y=%d\n",x,y);
swap(px,py);
printf("x=%d,y=%d\n",x,y);
}
如果将上面的swap函数变为如下
swap(int *a, int *b)
{
int t;
t=*a,*a=*b,*b=t;
printf("a=%d,b=%d\n",*a,*b);
}

如果输入5,9
两个的结果是什麽,请分析两者的不同?

输出是一样的
但是前面的那个并没有调换main中px和py的值。值调换了传值进去的指针,但是并没有修改指针指向的内容,打印的时候因为指针指向变了,打印出来的就好像真的调换了。但是函数退出以后,因为实际上内存没有修改,所以px和py么有变。
后面那个正统的swap写法,利用指针把px和py的内存修改了。

第一个输出:
5,9
9,5
5,9

第二个:
5,9
9,5
9,5