C++ int a[0];这句话有什么用?这有什么意义?

C++ int a[0];这句话有什么用?这有什么意义?,c++,c,C++,C,我已经在结构末尾的驱动程序中看到了该语句的用法。 谁能解释一下这句话有什么用?它是如何在内部工作的? 我的意思是编译器会将其视为数组还是变量?虽然两种标准都不支持大小为0的数组,但许多编译器允许将其作为扩展。标准化的C方式(C99+)完全忽略了尺寸 它用于描述由起始字段和可变数量的数组元素组成的数据结构,以及方便地访问它们。在C中,允许在结构的末尾放置可变大小的数组是一种技巧,通过为固定大小的字段和数组中所需的任何内容分配足够的内存。例如: struct array { size_t s

我已经在结构末尾的驱动程序中看到了该语句的用法。 谁能解释一下这句话有什么用?它是如何在内部工作的?
我的意思是编译器会将其视为数组还是变量?

虽然两种标准都不支持大小为0的数组,但许多编译器允许将其作为扩展。标准化的C方式(C99+)完全忽略了尺寸


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

在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来代替。

我想它是用于struct hack的。这就是问题所在。现在你会用它来代替。