gpt4 book ai didi

c - 数组参数中的数组长度

转载 作者:太空狗 更新时间:2023-10-29 16:56:42 25 4
gpt4 key购买 nike

我正在阅读 K.N.King 的C 编程:一种现代方法以学习 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 意味着调用者必须至少提供尽可能多的元素。大多数编译器忽略值本身。一些最近的编译器从中推断出不允许将空指针作为参数,并在可能的情况下相应地警告您。

还要注意原型(prototype)可能有 * 很明显这个值在那里并不重要。在多维数组的情况下,具体值是使用定义表达式计算的值。

关于c - 数组参数中的数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com