【发布时间】:2020-04-19 22:22:31
【问题描述】:
大家好,所以我一直在学习 C,我遇到了这个例子,我并没有真正找到背后的逻辑。这不是关于我正在寻找更多解释的代码的技术问题。 这是代码
#include <stdio.h>
void set_array(int array[4]);
void set_int(int x);
int main(void)
{
int a = 10;
int b[4] = {0, 1, 2, 3};
set_int(a);
set_array(b);
printf("%d %d\n", a, b[0]);
}
void set_array(int array[4])
{
array[0] = 22;
}
void set_int(int x)
{
x = 22;
}
输出是10 22
基本上我的问题是为什么从 set_array 函数传递的 22 重写 b 数组上的 0 并实际打印但从 set_int 函数传递的 22 没有被传递或打印。
谢谢大家!
【问题讨论】:
-
C 中没有“通过引用”——
void set_array(int array[4])实际上是void set_array(int* array) -
array衰减到set_array中的指针。[]实际上是一个指针解引用。所以要使set_int等同于set_array它更像是:void set_int(int *x) { *x = 22; } -
C 中的 Everything 都是按值传递的。唯一的区别是该值采用什么形式。对于数组,它们的表达值是指向第一个元素的指针。
-
@kaylum 所以基本上它只会覆盖值如果指向一个数组,比如在 set_array 函数中,对吧?
-
您没有接受解决问题的两个答案之一,为什么?
标签: c arrays pass-by-reference implicit-conversion function-declaration