数组名做函数参数进行传递时,实际上是是一份该指针的拷贝。
给形参赋予其他值,并不影响实参的值。
类似于:
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,使它指向下一个字符。用这种方式修改形参并不会影响调用程序的实参,因为只有传递给函数的那份拷贝进行了修改。