关于零长度数组的理解

零长度数组(柔性数组),一般用于可变结构体中,如:

struct Packet
{
    int state;
    int len;
    char cData[0]; //这理是一个零长度数组
};

用途 : 长度为0的数组的主要用途是为了满足需要变长度的结构体

用法 : 在一个结构体的最后, 申明一个长度为0的数组, 就可以使得这个结构体是可变长的. 对于编译器来说, 此时长度为0的数组并不占用空间, 因为数组名本身不占空间, 它只是一个偏移量, 数组名这个符号本身代表了一个不可修改的地址常量

如下例子:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct str{
    int length;
    char array[0];
};

int main(void)
{
    int len = 10;
    struct str *str = (struct str *)malloc(sizeof(struct str) + len);
    str->length = len;
    memset(str->array, '#', len);
    printf("str->length=%d, str->array[]=%s\n", str->length, str->array);
    return 0;
}

PS:

关于结构体中.与->的区别:

点(.)是用于结构体变量访问成员,

箭头(->)是用于结构体指针访问成员。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章