解答:
创新互联-专业网站定制、快速模板网站建设、高性价比鹿寨网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式鹿寨网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖鹿寨地区。费用合理售后完善,十多年实体公司更值得信赖。
1. 注意形式参数和实际参数的区别,主函数中的x,y是实际参数,swap函数中的a,b是形式参数。他们各有自己的存储空间,互不干扰。
2. 在程序适当位置加上输出地址的语句,即可看出为什么回到主程序后,x,y的值为什么不交换。
为了更形象,可以用图表示它们的关系:
可见,交换的只是swap函数中的a,b值,对主函数中的a,b值没有影响。
3. 修改的方法,将swap的交换变成值的交换。
int swap(int *a,int *b)//a与b分别复制主函数x与y的值,即a与x的指向相同,b与y的指向相同
{
int *t;
{t=a;a=b;b=t;}//通过交换,a和y的指向相同,b与x的指向相同,但是,x与y没有改变原来指向,这样函数swap结束,a与b消失,输出结果不变
}
换成
int t;
{t=*a;*a=*b;*b=t;}//将改变x和y指向的地址的值,达到交换目的
在 huan(int *p1,int *p2)这个函数中,交换的只是两个指针的指向,但是函数的结束、返回,这两个指针本身就消失了(它们的值并不会传回到main()函数中)所以,最后的结果没有交换。
如果要起到交换的作用,这个函数应该这样写:
void huan(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}