簡體   English   中英

C struct malloc和指針數組實現

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

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