
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;
}
No.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のノードを作って終わり
ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
探索二分木をバランス化する。
-
ツリーでのアイコンの設定
-
ポインタと構造体
-
[データ構造・アルゴリズム] B...
-
2分探索木の高さを求めるプロ...
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
C# TreeView 効率良いノード追...
-
Oracle階層問合せよりツリーノ...
-
TreeViewについて
-
XMLで特定の兄弟のノードの数を...
-
Haskell: foldrの使用について
-
PINGをHPから送信するには?
-
element of surprise
-
linuxにおけるネットワーク設定...
-
XSLでXMLデータをタブ区切りデ...
-
SAXの一例を教えて下さい
-
XPathでできるか確認
-
ゆっくりムービーメーカーで作...
-
xsl:sortを子要素で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
SNMP リンクダウンとノードダ...
-
あるノードリストに、特定の名...
-
同じタグ名の項目取得
-
C#でTreeViewのCheckBoxのサイ...
-
TreeView の初期表示について
-
昔Winnyってありましたけど、あ...
-
ノードとは
-
複数のマックPCによる数値計算...
-
C# TreeView 効率良いノード追...
-
TreeViewで複数ノードの選択は...
-
vbsのDOMDocumentで要素のText...
-
ツリービューのノードをダブル...
-
TreeViewに重複する値をセット
-
ToolStripMenuItemの選択(VB)
-
各ノードの行数取得
-
VB2005 TreeViewの任意ノード選択
-
TreeViewのノードの編集結果が...
-
TreeVIewのノード名を編集する...
おすすめ情報