零長度數組(柔性數組),一般用於可變結構體中,如:
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:
關於結構體中.與->的區別:
點(.)是用於結構體變量訪問成員,
箭頭(->)是用於結構體指針訪問成員。