数组参数中的数组长度
我正在阅读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
意味着调用者必须提供至少同样多的元素。 大多数编译器忽略了值本身。 最近的一些编译器从中推断出,如果可能的话,不允许空指针作为参数并相应地发出警告。
还要注意原型可能有*
如此清楚,价值在那里并不重要。 在多维数组的情况下,具体值是使用定义的表达式计算的值。