c - 这也是 C 语言中的灵活数组结构成员吗?

标签 c arrays struct

Possible Duplicate:
Flexible array members in C - bad?

我阅读了以下代码:

struct hello {
    int number;
    int data[1];
};

我知道灵活的数组成员允许我们将最后一个元素声明为 array of unspecified size像这样:

struct hello {
    int number;
    int data[];
};

在此struct ,最后一个元素没有指定大小,那么这两个有什么区别呢?第一个声明是什么意思?

最佳答案

这种数组:

struct hello {
    int number;
    int data[];
};

仅作为结构的最后一个元素才有意义,并且仅当您从堆分配结构时才有意义,并且通常使 header 字段包含数组的实际大小:

struct hello *helloptr = malloc(sizeof (struct hello) + count*(sizeof int));
helloptr->number = count;

用途是用一个结构体方便地分配 header 和数据缓冲区。

补充:与您的版本(分配大小为 1 的数组)的区别在于,sizeof struct hello 会更多,因为数组分配有一个元素,而不是 undefined=0。这要么浪费一项的内存,要么使大小计算更加复杂,并且从概念上来说有点“丑陋”(你的代码有大小为 1 的数组,而实际上你的意思是“未定义”,甚至可能是 0)。

在 OOP C++ 中,最好将动态分配的缓冲区包装在类中,这确实是一种“黑客”。

关于c - 这也是 C 语言中的灵活数组结构成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622797/

相关文章:

c - 如何用用户输入值填充 C 中的二维数组?

c - 将文件读入结构体

c - 我的 C 程序如何检查它是否对给定文件具有执行权限?

java - indexOf() 方法在 ArrayList 中找不到我的字符串

c - c 中的结构,其属性是指向同一结构的指针

c++ - Winsock 的跨平台替代方案?

c++ - 不能在一行中输入 (cin) 超过 10 个整数并用空格分隔到数组中吗?

python - NumPy 使用 reshape 函数 reshape 数组

c - 在 C 编程中将结构传递给函数

iphone - 使用 objective-c 传递和访问结构