在C中传递数组:方括号与指针

Luk*_*non 6 c memory arrays pointers function

我想将一个数组传递给一个函数.从我所看到的,有两种方法可以做到这一点:

1.

void f (int array[]) {
    // Taking an array with square brackets
}
Run Code Online (Sandbox Code Playgroud)

2.

void f (int *array) {
    // Taking a pointer
}
Run Code Online (Sandbox Code Playgroud)

每个人都被称为:

int array[] = {0, 1, 2, 3, 4, 5};
f (array);
Run Code Online (Sandbox Code Playgroud)

这两种方法之间是否存在实际差异?

AnT*_*AnT 6

在您的具体示例中,没有区别.

在更一般的情况下,这两种方法之间的一个区别源于这样的事实:在[]语法的情况下,语言对阵列声​​明的正确性执行"通常"检查.例如,使用[]语法时,必须完成数组元素类型.指针语法没有这样的要求

struct S;
void foo(struct S *a); // OK
void bar(struct S a[]); // ERROR
Run Code Online (Sandbox Code Playgroud)

此规则的一个特定副作用是您可以void *void []参数声明为参数.

如果指定数组大小,则必须为正数(即使之后被忽略).