首页 > 技术文章 > C语言中函数参数传递的本质是值传递

Lunais 2017-07-24 21:39 原文

数组名做函数参数进行传递时,实际上是是一份该指针的拷贝。

给形参赋予其他值,并不影响实参的值。

类似于:

int *p = a;    //a为数组名

p = b;          //b为数组名

当然,如果你传递了一个指向某个变量的指针,而函数对该指针执行了间接访问操作,那么函数就可以改变那个变量,但参数还是传值方式传递的,这是两个概念,不矛盾。

对于字符串复制函数strcpy:

void strcpy(char *buffer, char const *string)

{

    while((*buffer++ = *string++) != '\0')

            ;

}

 

把第2个参数中的字符串复制到第1个参数所指向的缓冲区。调用程序的缓冲区将被修改,因为函数对参数进行了间接访问操作。但是,无论函数对参数(指针)如何修改,都不会修改调用程序的指针实参本身(但可能修改他所指向的内容)。

注意while语句中的 *string++表达式。他取得string所指向的那个字符,并且产生一个副作用,就是修改string,使它指向下一个字符。用这种方式修改形参并不会影响调用程序的实参,因为只有传递给函数的那份拷贝进行了修改。

推荐阅读