什么之间的区别
struct mystruct *ptr = (struct test *)malloc(n*sizeof(struct test));
和
struct mystruct **ptr = (struct test *)malloc(n*sizeof(struct test *));
他们都做工精细,我只是好奇两人之间的实际差异。 是否第一个分配结构的数组,而第二个结构指针数组? 另一种方式? 此外,其中一个具有更小的内存占用?
什么之间的区别
struct mystruct *ptr = (struct test *)malloc(n*sizeof(struct test));
和
struct mystruct **ptr = (struct test *)malloc(n*sizeof(struct test *));
他们都做工精细,我只是好奇两人之间的实际差异。 是否第一个分配结构的数组,而第二个结构指针数组? 另一种方式? 此外,其中一个具有更小的内存占用?
所述第一分配的阵列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);
我只是好奇两人之间的实际差异
该函数malloc
不处理的结构或指针。 这只能理解字节 。 因此,第一个分配对于n足够的字节struct test
对象,对于n其中,所述第二分配足够的空间struct test *
对象。
他们都做工精细
从事态发展看,2将用于完全不同的东西。 例如,在第二种情况下,你就必须为每个分配存储器ptr[i]
的元素。
此外,其中一个具有较小的内存占用
你能回答这个问题自己,如果您打印sizeof(struct test)
和sizeof(struct test *)
但同样,他们是不同的东西, 有不同的目的 。 它具有占地面积小,拖拉机或甲虫?
第一分配结构的数组。 第二分配指针数组以结构(用于结构本身没有记忆)。 所以,当然,除非你的结构也像是指针非常小,二是小。