柔性数组必须放在结构体最后边
大小为0
不占用结构体空间
运行期分配空间时大小任意,由使用方保证使用时不越界
因为放在结构体最后,所以编译器可以算出结构体截止地址,也就可以算出最后一个数组的起始地址(将c程序编译成汇编之后,c中所有对变量的操作,都转化成对一个一个保存变量值的内存的地址的操作),可以顺利转化成汇编代码。
使用方在使用时,比如如果是字符串数组,由\0确保字符串结束,如果是其他类型数组,访问时,再额外传一个数组大小的参数
下边文章写的比较好
柔性数组必须放在结构体最后边
大小为0
不占用结构体空间
运行期分配空间时大小任意,由使用方保证使用时不越界
因为放在结构体最后,所以编译器可以算出结构体截止地址,也就可以算出最后一个数组的起始地址(将c程序编译成汇编之后,c中所有对变量的操作,都转化成对一个一个保存变量值的内存的地址的操作),可以顺利转化成汇编代码。
使用方在使用时,比如如果是字符串数组,由\0确保字符串结束,如果是其他类型数组,访问时,再额外传一个数组大小的参数
下边文章写的比较好