大小为0的数组如何存储在内存中?

Raf*_*uze 5 c memory arrays pointers

如果我有一个只有一个元素的数组,我们可以说它与指针相同。但是大小为零的数组在内存中是如何表示的呢?

当我声明变量时会发生什么int * table[0]?

cod*_*key 2

C 标准在技术上不支持零长度数组。然而,一些编译器(例如 gcc)允许它们作为扩展。

它们是 C99 之前创建灵活数组成员的方法,如下所示:

typedef struct {
    int len;
    int contents[0];
} arr;
Run Code Online (Sandbox Code Playgroud)

然后,您可以在末尾为数组初始化尽可能多的空间:

arr* a = malloc(sizeof(*a) + sizeof(a->contents) * 10); /* for a length-10 array */
a->len = 10;
Run Code Online (Sandbox Code Playgroud)

  • `int content[];` 将是一个_灵活的数组成员_。`int content[0];` 不是 FAM。 (2认同)