質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

642閲覧

リストの作成のコード

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

1クリップ

投稿2019/05/17 15:04

#include <stdio.h>
#include <stdlib.h>

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;
}
}

上のコードでリストの作成ができると書いてあるのですが、なぜこれでリストが作成されるのかわかりません。
これを実行したときにどのような動作が起きて、リストが作成されているのか教えてください。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/05/17 23:00

リストとはどういう構造なのか, 各行が何をしているか(構造体やポインタ, for文によるiの変化, malloc 等)はご理解されているという前提で良いのでしょうか.
guest

回答3

0

ベストアンサー

簡単な図を書いてみました。
リストの作成

  1. ループに入る前は、headNULLで初期化されていますので、何も指していません。

  2. ループ内では、mallocで割り付けられたオブジェクトへのポインターでtが初期化されます。t->nextheadが代入されますが、NULLなのでそこでリストが終端ということになります。

headtが代入されますので、headが生成されたperson_t型のオブジェクトを指すことになります。

  1. ループの二回目以降も同様の処理が行われます。t->nextheadが代入されますので既存のリストの先頭に新たに生成されたperson_t型のオブジェクトが挿入されます。

headは常にリストの先頭を指しています。

投稿2019/05/18 12:03

Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ヒント:最新要素は末尾ではなく先頭に追加される。つまり、整数値はheadから降順に並ぶ。

投稿2019/05/17 16:27

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、自分なりにコードの動作を追いかけていきましょう。
その上でわからないところを聞いてください

投稿2019/05/17 15:08

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問