我想按以下方式定义一个结构:
typedef struct Info_s
{
uint8 Size;
uint8 Address;
uint8 Pattern[Size];
}Info_t;
正如您所注意到的,数组 Pattern 的大小是“Size”,它首先在同一结构中声明。
对吗?
最佳答案
声明为结构字段的数组必须有一个整数常量表达式作为其大小,或者是一个没有大小的灵活数组成员 (uint8 Pattern[ ];
)。您的变体两者都不是。
如果你的数组大小是一个运行时值,你有两个选择
灵活的数组成员
uint8 Pattern[];
,这将导致一个“平面”结构。必须使用malloc
手动分配适当的内存量以容纳具有所需长度数组的整个结构。指针成员
uint8 *Pattern;
,在这种情况下,您的结构将变为两级结构。结构本身的内存和数组的内存通常会成为独立分配的两个单独的内存块。
灵活的数组成员通常是一个更好的主意(并且符合您明显的原始意图),除非您有一些其他要求会阻止该方法。
关于c - C中的结构定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48190662/