在读程序中,经常看到这样的定义: char data[0],这是一个什么样的用法,有什么好处,在哪些地方用到呢?
- 首先看一段程序:
typedef struct _Data1 {
int len;
char data[0];
} sData1;
typedef struct _Data2 {
int len;
char *data;
} sData2;
printf("----size of sData1: %lu\n", sizeof(sData1)); // 结构体大小为4
printf("----size of sData2: %lu\n", sizeof(sData2)); // 64位系统下结构体大小为16
sData1结构体中,data是一个数组名,但该数组没有元素,所以不占空间。
sData2结构体中,data为指针,在64位系统中占8字节。
- 实际应用中,使用方法如下:
int nLen = 100;
sData *p = (sData *)malloc(sizeof(sData) + nLen);
memset(p->data, 0, nLen);
该数组的真实地址紧随结构体之后,这种声明方法可以巧妙的实现C语言里的数组扩展。