#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _Info
{
int i;
char data[0];
}Info;
int main(int argc, char* argv[])
{
char buf[10] = "123456789";
void* p = NULL;
printf("%d\n",sizeof(Info));
Info* info = (Info*)malloc(sizeof(Info) + 10);
p = (void*)info->data;
printf("addr of info is %p. addr of data is %p .\n", info, p);
strcpy((char*)p, buf);
printf("%s\n", (char*)p);
return 0;
}
运行结果如下:
4
addr of info is 0x97de008. addr of data is 0x97de00c .123456789
可知,data的地址是紧随结构体之后的。。整数i就占了4个字节,这表明data没有占用空间。data是一个数组名;该数组没有元素;该数组的真实地址紧随结构体Info之后;这种声明方法可以巧妙的实现C语言里的数组扩展。