在我们以前的学习中,总是习惯在子函数(被调用函数)中打印结果,今天我们来说说这样做的弊端以及如何优化,以交换函数为例
void Swap(inta,int b)
{
inttem;
tem=a;
a=b;
b=tem;
printf("%d\n%d\n",a,b);
}
int main()
{ inta=3;
intb=4;
Swap(a,b);
return0;
}
以前总习惯这样写,似乎程序运行出来说也是正确的。但是在主函数中打印结果只能证明子函数中两个数字交换成功了,但是父函数中(主函数)中的两个数字是否交换成功了呢?
我们不妨将打印函数放到主函数中,然后运行验证一下。即:
int main()
{ inta=3;
intb=4;
Swap(a,b);
printf("%d%d\n",a,b);
return0;
}
运行之后我们会发现,两个数字没有任何变化,并没有进行交换,也就是说子函数的交换函数并没有作用到主函数。那这时我们该如何修改?指针可以修改变量的值,是不是通过指针可以让子函数可以对父函数是实现修改呢?
这时有一个知识点有一定的参考作用:
父函数调用子函数,子函数能修改父函数中内容的前提是:
1、传指针
2、解引用
如图所示,我们必须在主函数中将a、b的地址作为形参传输过去,再在子函数中对指针变量进行交换,最后进行解引用即可。
具体实现过程如下:
void Swap(int*a,int *b)
{
inttem;
tem=*a;
*a=*b;
*b=tem;
}
int main()
{ inta=3;
intb=4;
Swap(&a,&b);
printf("%d%d\n",a,b);
return0;
}