这两种实现有何不同:
struct queue {
int a;
int b;
q_info *array;
};
和
struct queue {
int a;
int b;
q_info array[0];
};
最佳答案
第二个 struct
不使用零元素数组 - 这是 C99 之前的技巧,用于制作灵活的数组成员。不同之处在于,在第一个片段中,您需要两个 malloc
- 一个用于 struct
,一个用于 array
,而在第二个片段中您可以在一个 malloc
中完成这两个操作:
size_t num_entries = 100;
struct queue *myQueue = malloc(sizeof(struct queue)+sizeof(q_info)*num_entries);
代替
size_t num_entries = 100;
struct queue *myQueue = malloc(sizeof(struct queue));
myQueue->array = malloc(sizeof(q_info)*num_entries);
这让您可以节省释放次数,提供更好的引用局部性,还可以节省一个指针的空间。
从 C99 开始,您可以从数组成员的声明中删除零:
struct queue {
int a;
int b;
q_info array[];
};
关于c - 在结构中使用指针和零元素数组的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19293571/