MALLOC结构指针数组VS结构的数组(malloc an array of struct poin

2019-07-31 11:27发布

什么之间的区别

struct mystruct *ptr = (struct test *)malloc(n*sizeof(struct test));

struct mystruct **ptr = (struct test *)malloc(n*sizeof(struct test *));

他们都做工精细,我只是好奇两人之间的实际差异。 是否第一个分配结构的数组,而第二个结构指针数组? 另一种方式? 此外,其中一个具有更小的内存占用?

Answer 1:

所述第一分配的阵列struct ,另一个分配指针的阵列struct 。 在第一种情况下,可以通过分配写入字段ptr[0].field1 = value; 向右走,而在第二种情况下,你必须分配struct进行实际写入之前本身。

它是确定下降的投malloc结果在C,所以你可以写

struct mystruct **ptr = malloc(n*sizeof(struct test *));
for (int i = 0; i != n ; i++) {
    ptr[i] = malloc(sizeof(struct test));
}
ptr[0]->field1 = value;
...
// Do not forget to free the memory when you are done:
for (int i = 0; i != n ; i++) {
    free(ptr[i]);
}
free(ptr);


Answer 2:

我只是好奇两人之间的实际差异

该函数malloc不处理的结构或指针。 这只能理解字节 。 因此,第一个分配对于n足够的字节struct test对象,对于n其中,所述第二分配足够的空间struct test *对象。

他们都做工精细

从事态发展看,2将用于完全不同的东西。 例如,在第二种情况下,你就必须为每个分配存储器ptr[i]的元素。

此外,其中一个具有较小的内存占用

你能回答这个问题自己,如果您打印sizeof(struct test)sizeof(struct test *) 但同样,他们是不同的东西, 有不同的目的 。 它具有占地面积小,拖拉机或甲虫?



Answer 3:

第一分配结构的数组。 第二分配指针数组以结构(用于结构本身没有记忆)。 所以,当然,除非你的结构也像是指针非常小,二是小。



文章来源: malloc an array of struct pointers vs array of structs