C中的结构定义

Sta*_*ver 0 c arrays structure definition

我想通过以下方式定义结构:

typedef struct Info_s
{
 uint8   Size;
 uint8   Address;
 uint8   Pattern[Size];    
}Info_t;
Run Code Online (Sandbox Code Playgroud)

您可以注意到数组Pattern的大小是"Size",它在同一结构中首先声明.

那是对的吗?

AnT*_*AnT 5

声明为struct字段的数组必须具有整数常量表达式作为其大小,或者是没有size()的灵活数组成员uint8 Pattern[];.你的变种既不是.

如果您的案例中的数组大小是运行时值,则有两种选择

  1. 灵活的数组成员uint8 Pattern[];,将导致"扁平"结构.必须malloc手动分配适当数量的内存以容纳具有所需长度数组的整个结构.

  2. 指针成员uint8 *Pattern;,在这种情况下,您的结构将变为两层.结构本身的内存和数组的内存通常会成为独立分配的两个独立的内存块.

灵活的数组成员通常是一个更好的主意(并且符合您明显的原始意图),除非您有一些其他要求可以排除这种情况.