質問: int main(){ typedef struct person person_t; struct person{ int id; person_t *next; }; person_t *head=NULL; for(int i=0; i<10; i++){ person_t *t=malloc(sizeof(*t)); t->id=i; t->next=head; head=t; } } 上のコードでリストの作成ができると書いてあるのですが、なぜこれでリストが作成されるのかわかりません。 これを実行したときにどのような動作が起きて、リストが作成されているのか教えてください。
回答: 簡単な図を書いてみました。 !リストの作成 1. ループに入る前は、`head`は`NULL`で初期化されていますので、何も指していません。 2. ループ内では、`malloc`で割り付けられたオブジェクトへのポインターで`t`が初期化されます。`t->next`に`head`が代入されますが、`NULL`なのでそこでリストが終端ということになります。 `head`に`t`が代入されますので、`head`が生成された`person_t型`のオブジェクトを指すことになります。 3. ループの二回目以降も同様の処理が行われます。`t->next`に`head`が代入されますので既存のリストの先頭に新たに生成された`person_t型`のオブジェクトが挿入されます。 `head`は常にリストの先頭を指しています。