标准c/c++不支持0长度数组,GNU支持
struct node
{
char a;
short b;
int c;
char* d;
char e[0];
};
int main(int argc, char* argv[])
{
printf("%d\n", sizeof(struct node));
system("pause");
return 0;
}
// 上述代码输出为12, 0长度数组不占用内存空间
// 代码中e表示一个常量指针,这个特性由编译器来实现的,故具有不可移植性
对于这个用法,我们定义的结构体指针可以指向任意长度的内存buffer,这个技巧在变长buffer中使用起来相当方便。可能有朋友说,为什么不把最后的contents直接定义为一个指针呢?这儿的差别是这样的,如果定义为一个指针,它需要占用4Bytes,并且在申请好内存后必须人为赋地址才可以。如果使用这个用法,这个常量指针不占用空间,并且无需赋值。