我已经在结构的末尾看到了这个语句在驱动程序中的用法。 任何人都可以解释一下这个陈述的用途是什么?它在内部如何运作? 我的意思是编译器会将其视为数组还是变量?
答案 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用于描述由起始字段和可变数量的数组元素组成的数据结构,以及对它们的舒适访问。