柔性数组:
结构中的最后一个元素是未知大小的数组,这就叫做柔性数组成员,但结构体中的柔性数组成员之前必须至少一个其他成员。sizeof返回的这种结构的大小是不包括柔性数组的内存。包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
typedef struct st_type
{
int i;
int a[];
}type_a;
用sizeof(type_a)得到的结果是4,0个元素的数组没有占内存空间,而后就可以进行变长操作。通过下列狮子为结构体分配内存。
type_a *p=(type_a*)malloc(type_a)+100*sizeof(int);
这样用p->a[]就能简单访问可变长元素,这时候再用sizeof(*p)测试结构体的大小,发现仍然为4.柔性数组只是编外成员,不占结构体的编制,只是说在使用柔性数组时把它当作结构体的一个成员。
struct与class