cocowy的编程之旅
前言
曾几何时,一直对函数里参数的调用搞不清楚,形参还是实参?调用函数后为何只能返回值?
这些问题在我初学C语言的时候一直感到很迷惑,故记之已给后来者避坑。
首先我们看一段这样的代码:
void swap(int a,int b);
int main()
{
int a=5;
int b=6;
swap(a,b);
printf("a=%d b=%d",a,b);
return 0;
}
void swap(int a,int b){
int t=a;
a=b;
b=t;
}
大家看到结果代码运行结果后自然会产生疑问,我不是通过调用swap函数进行参数间的替换了嘛?为什么运行结果依旧是原来主函数定义的a,b值呢?
其实这是因为C语言的结构特性决定的,容我慢慢道来。
这是因为定义函数的时候a,b为形参不参与计算,而在主函数调用其他函数时a,b参数的值传递给了swap函数。
值得注意的是,a,b函数在swap函数调用后并没有改变,因为每个函数都有自己的变量空间,参数也位于这个独立的空间中,和其他参数没有任何关系。正是因为如此,在swap函数里面发生的任何事情都与主函数a,b两个参数无关。而且在swap函数里面没有返回值(return)传递给主函数,导致两个函数中的参数发生的关系互不影响。