gpt4 book ai didi

c - 结构末尾大小为 0 的数组

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

<分区>

我正在学习的系统编程类(class)教授今天告诉我们要定义一个末尾带有零长度数组的结构:

struct array{
size_t size;
int data[0];
};

typedef struct array array;

这是一个有用的结构体,用于定义或初始化带有变量的数组,即,如下所示:

array *array_new(size_t size){
array* a = malloc(sizeof(array) + size * sizeof(int));

if(a){
a->size = size;
}

return a;
}

也就是说,使用 malloc(),我们还为大小为零的数组分配了内存。这对我来说是全新的,而且看起来很奇怪,因为根据我的理解,结构的元素不一定位于连续的位置。

为什么array_new中的代码会为data[0]分配内存?那么为什么访问是合法的,比如说

array * a = array_new(3);
a->data[1] = 12;

?

从他告诉我们的情况来看,在结构末尾定义为长度为零的数组似乎确保紧跟在结构的最后一个元素之后,但这看起来很奇怪,因为,再次,根据我的理解,结构可以有填充。

我还看到这只是 gcc 的一个特性,并没有被任何标准定义。这是真的吗?

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