数组参数中的数组长度

时间:2015-04-27 12:07:24

标签: c arrays function parameters static

我正在阅读K.N.King的 C Programming:A Modern Approach 来学习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 */
}

所以问题是:

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

b。此上下文中的static修饰符仅仅具有美观性吗?究竟是什么意思和做法?

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

void myfunc(int[4]);

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

1 个答案:

答案 0 :(得分:2)

函数数组参数的最内层维度总是被重写为指针,所以不幸的是,你给出的值并不重要。这会对多维数组进行更改:从第二维开始,编译器会使用这些数据来计算A[i][j]之类的内容。

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

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