[英]C struct malloc & array of pointers implementation
幾天前我才剛開始用C編程。 我現在正在嘗試學習結構。
我有這個程序, 我想對其進行改進,以使我的數組人現在是指向結構的指針數組。 我不確定該怎么做。
我還想修改我的insert方法,以調用malloc創建一個新結構並設置指向它的正確數組元素。
據我所知,malloc是動態內存分配,但是盡管我已經閱讀了一些指南,但是我仍然不確定如何使用它。 另外,在使用malloc之后,我還需要在程序中進行哪些更改才能使其像以前一樣工作?
如果要people
成為指針數組,則必須這樣聲明:
struct person *people[12];
請記住,聲明遵循使用,並且取消引用的優先級低於數組索引; 這意味着*people[i]
是struct person
類型的,因此people[i]
是struct person
的指針。
要初始化在每個位置上people
,你可以調用malloc()
,使您的指針指向一個有效的存儲位置,大到足以容納一個struct person
。 就像這樣簡單:
people[i] = malloc(sizeof(struct person));
當您不再需要people
,您必須記住要通過為每個位置i
調用free(people[i])
來free(people[i])
分配的每個內存位置。
我注意到您聲明了該數組可容納12個結構。 當有人更改代碼時,這可能很危險:當HOW_MANY
大於12時,它將不起作用。您應該聲明一個相同大小的數組:
struct person *people[HOW_MANY];
這樣可以確保您的陣列始終具有恰好需要的空間。
更新:您需要聲明insert
為接收指針數組而不是結構數組:
靜態無效插入(struct person * people [],char * name,int age){...}
people[i].name
無效。 由於people[i]
現在是一個指針,因此您需要這樣做:
people[i]->name
或者,等價地, (*people[i]).name
。
同樣適用於people[i]->age
。 記住要同時在main()
和內部insert
進行更改。
另外,除非有充分的理由,否則請考慮將i
insert
而不是使用static
變量。 靜態變量用於具有內部狀態的函數,對我而言, insert
並不是您想要的那種函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.