[ad_1]
私は2つの構造を持っています
C
struct list { char *name; int ID; int marks[5]; } struct Employee { char *school_name; unsigned long int ID; struct list * student_list; //here i want to use pointer only, because i don't know student si }; struct Employee high_list;
ここでは、1 つの学校の 20 人の生徒の名前、ID、マークが必要です。 お気に入り
C
high_list.student_list[0].ID =20; high_list.student_list[2].ID =20; high_list.student_list[3].ID =30; high_list.student_list[4].ID =30; high_list.student_list[0].mark[0] =20; high_list.student_list[2].mark[1] =20; high_list.student_list[3].mark[0] =30; high_list.student_list[4].mark[4] =30;
20人の学生リストにメモリを割り当てるにはどうすればよいですか;
.student_list=(構造体リスト *)malloc(sizeof(構造体リスト)); //これは 1 つのリスト用です
if i do(構造体リスト) *20 ???
20人の学生に割り当てたい
私が試したこと:
動的メモリ割り当て
malloc(sizeof(構造体リスト)*20)
解決策 1
実際、どちらかを使用できます
C
high_list.student_list = (struct list *) malloc( sizeof(struct list ) * 20);
また
C
high_list.student_list = (struct list *) calloc( 20, sizeof(struct list) );
ところで、次のことを忘れないでください。
- の戻り値を確認してください
malloc
(またcalloc
) 呼び出し。メモリ割り当てが失敗する可能性があるためです。 - 割り当てられたメモリが不要になったら解放します。
解決策 3
パリニの解決策は提案どおりに機能します。
C
struct Employee high_list; high_list.student_list = (struct list *) calloc(20, sizeof(struct list)); if (high_list.student_list == NULL) return -1;
もちろん、インクルード
注意: 文字列 name と school_name については、使用するとすぐにメモリも必要になります!
解決策 2
いいえ、最初のメンバーにのみ割り当てています.ie
high_list.student_list
みたいに使えない
high_list.student_list[0] high_list.student_list[1]....e.t.c
[ad_2]
コメント