[英]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.