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

标签 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] 

对我来说没有意义!

最佳答案

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

void test(char arr[])void test(int * arr) 是编写相同内容的两种方法

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

关于c - 当我们将数组传递给函数时,复制是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098883/

相关文章:

c - 如何在opencv中转换像素值以显示图像

c - 在处理 .wav 文件时我应该使用哪种 fopen() 模式?

sql - 在 Coldfusion 中执行 SQL 函数

arrays - Visual Basic 6.0 : function returning array

javascript - 取消选中刚刚基于javascript函数选中的复选框

c - 时间结构使用

c - 如何从 stdin 获取在 C 中具有前导空格的字符串输入?

c++ - 创建对象的拷贝

arrays - 如果属性值存在于另一个对象数组中,则快速过滤对象数组

c - SIMD 数组添加任意数组长度