结构体中的0长度数组
目录
0长度数组的使用条件:
- 必须在结构体中
- 使用GNU编译(0长度数组是GNU编译器特有的trick)
用途: 长度为0的数组的主要用途是为了满足需要可变长度的结构体
用法: 在一个结构体的最后, 申明一个长度为0的数组, 就可以使得这个结构体是可变长的. 对于编译器来说, 此时长度为0的数组并不占用空间, 因为数组名本身不占空间, 它只是一个偏移量, 数组名这个符号本身代表了一个不可修改的地址常量
优点: 比起在结构体中声明一个指针变量再进行动态分配的办法,这种方法效率要高。因为申请内存空间时,指针方式需申请两次,一次是分配给结构体,另一次是分配给结构体中的指针所指向的空间,而0长度数组只需申请一次;访问内存空间时,指针方式需访问两次,一次是结构体内存,一次是指针指向的内存,而0长度数组只需访问一次,即结构体的内存
缺点: 可移植性差