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

 

posted @ 2018-10-16 13:55  eatwhat  阅读(1523)  评论(0编辑  收藏  举报