数组参数中的数组长度

Min*_*ock 9 c arrays parameters static function

我正在阅读C编程: KNKing 的现代方法学习C编程语言,本章讲述函数和数组参数.解释说,可以使用这些结构来表示数组参数的长度:

1.

void myfunc(int a, int b, int[a], int[b], int[*]); /* prototype */

void myfunc(int a, int b, int n[a], int m[b], int c[a+b+other_func()]) {
... /* body */
}
Run Code Online (Sandbox Code Playgroud)

2.

void myfunc(int[static 5]); /* prototype */

void myfunc(int a[static 5]) {
... /* body */
}
Run Code Online (Sandbox Code Playgroud)

所以问题是:

一个.示例1中的构造是纯粹的装饰还是它们对编译器有影响?

就是static在这种情况下只有美容性质的修改?究竟是什么意思和做法?

C.是否也可以像这样声明一个数组参数; 它和实例1一样是化妆品吗?

void myfunc(int[4]);

void myfunc(int a[4]) { ... }
Run Code Online (Sandbox Code Playgroud)

Jen*_*edt 2

函数数组参数的最内层维度总是被重写为指针,因此不幸的是,您在那里给出的值并不重要。对于多维数组,这种情况发生了变化:从第二维开始,编译器使用它们来计算诸如 之类的东西A[i][j]

static上下文中意味着调用者必须提供至少同样多的元素。大多数编译器都会忽略该值本身。最近的一些编译器从中推断出不允许将空指针作为参数,并在可能的情况下相应地警告您。

还要注意的是,原型可能*很明显,价值在那里并不重要。对于多维数组,具体值是使用定义表达式计算的值。