开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t{ struct list_t *next; struct list_t *prev; char data[0]; }list_t;
最后一行char data[0];的作用是?
首先对0长数组做一个解释:
用途 :长度为0的数组的主要用途是为了满足需要变长度的结构体。
用法 :在一个结构体的最后 ,申明一个长度为0的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们可以进行动态分配!对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量!
本来打字打了很多,结果我2G内存的电脑崩溃了,重启后都没了,哎,大家自己补一下这个吧,: https://blog.csdn.net/tjcwt2011/article/details/80824505