c语言函数是怎么传递参数的
其实就是把变量或常量复制了一份给函数中的变量,简单说来就是复制的过程。
有一个很经典的问题:用函数交换两个变量的值。
int a=1;
int b=2;
swap(a,b)
有一个函数是这样实现的
voidswap(int m,int n)
{
int t;
t=m;m=n;n=t;
}
printf("a=%d b=%d",a,b);
最后输出a和b的值,我们预期a和b的值可能被交换了,但实际上根本没有,是怎么回事呢?
问题出在函数参数传递,实际上在调用swap(a,b)发生的一个“值复制”过程
m=a,n=b //把a的值复制给了m,把b的值复制给了n
而在swap函数内部是实现了被复制的a和被复制的b的交换,而在函数外部并没有完成原始的a和原始的b的交换
如果函数参数是指针为什么又可以呢?
int a=1;
int b=2;
swap(&a,&b)
voidswap(int *m,int *n)
{
int t;
t=*m;*m=*n;*n=t;
}
在调用 swap(&a,&b)的时候是一个“地址复制”的过程,具体如下
m=&a,n=&b//把变量a的地址复制给了m,把变量b的地址复制给了n
在函数内部
*m就等于*&a,也就是在函数内部访问到了函数外部的a
*n就等于*&b也就是b。也就是在函数内部访问到了函数外部的b