int a [0];这个陈述有什么用?它有意义吗?

时间:2014-04-22 08:48:27

标签: c++ c

我已经在结构的末尾看到了这个语句在驱动程序中的用法。 任何人都可以解释一下这个陈述的用途是什么?它在内部如何运作? 我的意思是编译器会将其视为数组还是变量?

2 个答案:

答案 0 :(得分:2)

在C中,通过为固定大小的字段和数组中的任何内容分配足够的内存,允许您在结构的末尾放置一个可变大小的数组,这是一个技巧。例如:

struct array {
    size_t size;
    int a[]; // strictly, it should be incomplete rather than zero sized
};

struct array * make_array(size_t size) {
    struct array * array = malloc(sizeof (struct array) + size * sizeof (int));
    array->size = size;
    return array;
}

struct array * array = make_array(2);
array->a[1] = 42;  // No problem: there's enough memory for two array elements

在C ++中,它无效。请改用std::vector

答案 1 :(得分:0)

虽然任何标准都不支持大小为0的数组,但许多编译器允许它们作为扩展。标准化的C方式(C99 +)完全不考虑大小。

Thiis用于描述由起始字段和可变数量的数组元素组成的数据结构,以及对它们的舒适访问。