[英]C Struct array member without specific length
我遇到過這段代碼:
struct test
{
uint32 num_fields;
char array_field [];
};
我怎么能理解array_field
? 這是C語言的gcc擴展嗎?
它是一個C99功能,稱為靈活數組成員 ,通常用於創建可變長度數組。
它只能被指定為一個結構的最后一個成員,而無需指定尺寸(如在array_field [];
例如,您可以執行以下操作,並且成員arr
將為其分配5個字節:
struct flexi_example
{
int data;
char arr[];
};
struct flexi_example *obj;
obj = malloc(sizeof (struct flexi_example) + 5);
它的優點/缺點在這里討論:
此類結構通常在堆上以計算的大小分配,代碼如下:
#include <stddef.h>
struct test * test_new(uint32 num_fields)
{
size_t sizeBeforeArray = offsetof(struct test, array_field);
size_t sizeOfArray = num_fields * sizeof(char);
struct test * ret = malloc(sizeBeforeArray + sizeOfArray);
if(NULL != ret)
{
ret->num_fields = num_fields;
}
return ret;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.