關於零長度數組的理解

零長度數組(柔性數組),一般用於可變結構體中,如:

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:

關於結構體中.與->的區別:

點(.)是用於結構體變量訪問成員,

箭頭(->)是用於結構體指針訪問成員。


 

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