C中空数组的性质是什么?

我有以下代码:

#include <stdio.h>

int main(void) {
    int array[0];
    printf("%d", array);
    return 0;
}

我们知道,数组总是指向它的第一项,但在这个例子中我们没有项,但是这段代码会产生一些内存地址。它指向什么?

回答

大小为 0 的数组被视为违反约束。因此,拥有这样一个数组并尝试使用它会触发未定义的行为。

C 标准的第 6.7.6.2p1 节关于数组声明符的约束指出:

除了可选的类型限定符和关键字之外static[and]还可以分隔表达式 or *。如果它们分隔表达式(指定数组的大小),则表达式应具有整数类型。 如果表达式是一个常量表达式,它的值应该大于零。 元素类型不应是不完整或函数类型。可选的类型限定符和关键字static应仅出现在具有数组类型的函数参数的声明中,然后仅出现在最外层的数组类型派生中

GCC 将允许零长度数组作为扩展名,但前提是它是struct. 这是指定灵活数组成员的另一种方法,如果省略数组大小,则在 C 标准中是允许的。


以上是C中空数组的性质是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>