malloc结构指针数组与结构数组

alf*_*alf 9 c arrays malloc struct pointers

有什么区别

struct mystruct *ptr = (struct test *)malloc(n*sizeof(struct test));
Run Code Online (Sandbox Code Playgroud)

struct mystruct **ptr = (struct test *)malloc(n*sizeof(struct test *));
Run Code Online (Sandbox Code Playgroud)

他们都工作正常,我只是好奇两者之间的实际差异.第一个是否分配了一个结构数组,而第二个是结构指针数组?另一种方式?另外,哪一个内存占用较小?

das*_*ght 18

第一个分配一个数组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);
Run Code Online (Sandbox Code Playgroud)

  • @Matt铸造'malloc`的结果在C中是不必要的.这里有一个[链接](http://stackoverflow.com/a/605858/335858)非常好的解释为什么它是不必要的以及它如何隐藏错误.请注意,在C++中,规则是不同的:您需要插入一个强制转换. (3认同)