发件人:scs@eskimo.com (Steve Summit)
主题:回复:函数
日期:1996年5月27日 08:50:17 -0700 (PDT)
Message-Id: <199605271550.IAA07326@mail.eskimo.com>
In-Reply-To: <4o4p05$5s7@oly.olympic.net>
> 我知道只有变量的值被传递到函数中
> 放在栈上,这使得调用函数无法更改
> 主函数中的值。那么为什么strcat()可以
> 从strcat函数中更改主函数中的字符串值?
这里有两种看待方式。
简化地说(虽然这样说稍微不准确)是,数组是函数参数传值规则的一个例外。你可以说strcat()接受两个数组,并且数组是引用传递的,在这种情况下,函数**可以**修改调用者中的数组内容。
完全正确的解释(虽然一开始会有些令人困惑)是,数组根本就没有传递给函数。而是传递了一个指向数组第一个元素的**指针**。(事实上,你通常会看到strcat()被文档说明为接受两个指向char的指针。)函数会像往常一样接收指针的副本,所以它无法修改调用者中的指针。**但是**,它接收的副本指针很明显指向同一个地方(在这种情况下,指向包含相同字符串的相同数组),所以函数**可以**修改指针指向的内存(即字符串)。