我在 K&R C 书中读到,当我们将数组传递给函数时,数组的地址(包含数组第一个元素的地址的指针)被传递给函数,因此看起来像引用传递(尽管 C 中没有这样的真实机制)
但是,下面的内容对我来说没有意义 -
void test(char arr[10]) {
arr[2] = 'a';
}
main() {
char arr[5] = "hello";
test(arr);
printf("%s", arr);
return 0;
}
这给了我预期的治疗效果。
但这是否意味着这就是评估的方式?
“char arr[]”参数被分配了指向实际数组的指针?这是如何运作的?
char arr[10] = &arr[0]
对我来说没有意义!
最佳答案
在test中,参数arr接收参数的地址,因为它是一个数组,而不是副本,因此您修改arr<的值/em> 在 main 中(在 test 和 main 中不使用相同的名称更实际:-) )
void test(char arr[]) 和 void test(int * arr) 是编写相同内容的两种方法
调用test(arr)和test(&arr[0])也是编写同一事物的两种方法
关于c - 当我们将数组传递给函数时,复制是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098883/