如果丢弃长度数据,C的数组语法有什么意义?

Del*_*yan 9 c arrays syntax

这是一个示例程序:

#include <stdio.h>

void foo(int b[]){
    printf("sizeof in foo: %i\n", sizeof b);
}

int main(){
    int a[4];
    printf("sizeof in main: %i\n", sizeof a);
    foo(a);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

sizeof in main: 16
sizeof in foo: 8
Run Code Online (Sandbox Code Playgroud)

问题是,如果它只是在函数边界转换为标准指针,那么该语法的意义是什么?

Fre*_*Foo 12

  1. 这是语法糖:void foo(int b[])暗示它将b被用作数组(而不是单个out-parameter),即使它确实是一个指针.

  2. 是C语言早期版本的遗留物,其中postfix []是指针声明的语法.

  • @Mehrdad:不一定.句法糖导致分号癌症. (14认同)