我正在阅读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]) { ... }
答案 0 :(得分:2)
函数数组参数的最内层维度总是被重写为指针,所以不幸的是,你给出的值并不重要。这会对多维数组进行更改:从第二维开始,编译器会使用这些数据来计算A[i][j]
之类的内容。
该上下文中的static
意味着调用者必须提供至少相同数量的元素。大多数编译器忽略了值本身。一些最近的编译器从中推断出,如果可能的话,不允许空指针作为参数并相应地发出警告。
同时观察原型可能*
如此清楚,价值在那里并不重要。在多维数组的情况下,具体值是使用定义的表达式计算的值。