c编程练习题

来源:百度知道 编辑:UC知道 时间:2024/05/31 03:35:36
swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("\n%d,%d",a,b);
printf("\n%d,%d\n",*pointer_1,*pointer_2);
}
a,b的结果不变我明白,但是*pointer_1,*pointer_2的值问什么也不变啊

这个问题很简单。
首先你要知道函数的参数传递的只是副本。
调用函数swap(int *p1,int *p2) ,只是对函数实参数的地址副本进行地址交换,就着这个函数来说,在交换前,p1地址是pointer_1,p2的地址是pointer_2;交换后p1地址是pointer_2,p2的地址是pointer_1,但pointer_1和pointer_2的地址还是没变还是原来的地址,通俗说,a,b形参分别拿着A、B两实参的钥匙的复印件,a、b交换了钥匙,但A、B并没有交换钥匙,这里的钥匙就是指的是地址!
如果你想让pointer_1和pointer_2的值改变,就改写swap(int *p1,int *p2)。
swap(int *p1,int *p2)
{int *p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
这个函数通俗说,a,b形参分别拿着A、B两实参的钥匙的复印件打开A、B的房门将A、B俩房间里的东西对调,虽然A、B并没有交换钥匙但却交换了房间里的东西!

要想交换a、b的值,应该:
swap(int *p1,int *p2)
{int p;
p=*p1;
*p1=*p2;
*p2=p;
}

p1、p2是指向变量的内存值(内存地址)
*p1、*p2才是指向的变量的值。

============================
不好意思,把你的意思搞错了。
swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}
p1和p2都是局部变量,因此
swap(pointer_1,pointer_2);
不会改变pointer_1,pointer_2的值
如果,你要改变pointer_1,pointer_2
而不改变a、b的值,你可以这样:
//**************************
#include