当我们将数组传递给函数时,复制如何工作?

时间:2019-01-08 19:57:33

标签: c arrays function pass-by-reference

我在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] 

对我没有意义!

1 个答案:

答案 0 :(得分:0)

test

参数 arr 接收参数的地址,因为它是一个数组,而不是副本,因此您可以修改 arr < / em>(在 main 中)(在 test main :-中不使用相同的名称更为实用))

void test(char arr []) void test(int * arr)是写同一件事的两种方法

调用 test(arr) test(&arr [0])也是写同一件事的两种方法