簡體   English   中英

malloc結構指針數組與結構數組

[英]malloc an array of struct pointers vs array of structs

有什么區別

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;來寫入字段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 *) ,您可以自己回答。 但同樣,它們是不同的東西, 具有不同的目的 哪個占地面積較小,拖拉機還是甲蟲?

第一個分配結構數組。 第二個分配一個指向結構的指針數組(結構本身沒有內存)。 所以第二個是較小的,除非你的結構當然也像指針一樣小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM