数组参数中的数组长度

我正在阅读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 */ } 

2。

 void myfunc(int[static 5]); /* prototype */ void myfunc(int a[static 5]) { ... /* body */ } 

所以问题是:

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

在这种情况下, static修饰符只是化妆品性质吗? 究竟是什么意思和做法?

C。 是否也可以像这样声明一个数组参数; 它是化妆品,如例1?

 void myfunc(int[4]); void myfunc(int a[4]) { ... } 

函数数组参数的最内层维度总是被重写为指针,所以不幸的是,那里给出的值没有太大的重要性。 对于多维数组,这会发生变化:从第二维开始,编译器会使用它们来计算A[i][j]

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

还要注意原型可能有*如此清楚,价值在那里并不重要。 在多维数组的情况下,具体值是使用定义的表达式计算的值。