数组参数中的数组长度
Array lengths in array parameters
我正在阅读 C 编程:一种现代方法 K.N.King 以学习 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]) { ... }
函数数组参数的最里面的维度总是被重写为指针,所以不幸的是,你在那里给出的值并不重要。对于多维数组,这会发生变化:从第二维开始,编译器会使用它们来计算 A[i][j]
.
之类的东西
该上下文中的 static
意味着调用者必须至少提供同样多的元素。大多数编译器忽略值本身。一些最近的编译器从中推断出不允许将空指针作为参数,并在可能的情况下相应地警告您。
还可以观察到原型可能有 *
,很明显该值在那里并不重要。在多维数组的情况下,具体值是使用定义表达式计算的值。
我正在阅读 C 编程:一种现代方法 K.N.King 以学习 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]) { ... }
函数数组参数的最里面的维度总是被重写为指针,所以不幸的是,你在那里给出的值并不重要。对于多维数组,这会发生变化:从第二维开始,编译器会使用它们来计算 A[i][j]
.
该上下文中的 static
意味着调用者必须至少提供同样多的元素。大多数编译器忽略值本身。一些最近的编译器从中推断出不允许将空指针作为参数,并在可能的情况下相应地警告您。
还可以观察到原型可能有 *
,很明显该值在那里并不重要。在多维数组的情况下,具体值是使用定义表达式计算的值。