重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語初心者です。
下のコードはリスト構造のサンプルコードを元に自分で書き直そうとしているコードです。(なので、現時点では不完全なところ(例えばfreeしてないとか)があるのと、自分で理解出来ていない箇所があります。)
実行すると、8から3までの値が一応表示されるようになったですが、その過程の仕組みが自分でもよく理解出来ていません。
(1)tra *q = NULL; 通常、構造体のポインタを使用するときはq = &___のように他の構造体のアドレスを渡して使用出来るようにすると思いますが、ここではなぜ*qに、NULLを代入する必要があるのでしょうか。
(2)そのNULL状態のポインタqを関数printingdudeに突っ込んで結果的に8、7、6、、と出力されるまでの過程がよくわかりません。簡単に解説して頂けると助かります。(ちょっと雑な質問になってしまい申し訳ありません)

typedef struct transcript{
int no;
struct transcript *next;
} tra;
void printingdude(struct transcript *m);
tra* noud(int v, tra* c);
int main(){
tra *q = NULL;
int i;
for(i = 8; i>1; i--){
printingdude(q);
q = noud(i, q);
}
return;
}

void printingdude(struct transcript *m){
if(m ==NULL) return;
printf("%d\n", m->no);
}
tra* noud(int v, tra* c){
tra *a = (tra *) malloc(sizeof(tra));
a->no = v;
a->next = c;
return a;
}

A 回答 (1件)

・printingdudeはノードの値を表示する関数


・noudeは新しいノードを作ってリストの最初につなぐ関数
ですね?
最初にNULLを入れているのは、trがNULLならリストが終わりという意味にしようとしているのでしょう。
forの中の動きですが、
i=8の時:printingdudeはmがNULLなので何も表示しない、noudeはnoが8のノードを新しく作ってリストの最初に挿入
i=7の時:printingdudeはさっき作ったノードのnoを表示(8が表示される)、noudeはnoが7のノードを新しく作ってリストの最初に挿入
i=6~2も同様で、最後はno=2のノードを作って終わり
ですね。
    • good
    • 0
この回答へのお礼

有り難うございました。

お礼日時:2008/08/02 10:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!