HOME»基本情報技術者試験掲示板»平成30年秋期午後問9 構造体の全体像が掴めません
投稿する

[4648] 平成30年秋期午後問9 構造体の全体像が掴めません

 匿名希望さん(No.1) 
C言語の構造体を完璧に理解できていない前提ですが、構造体block_infoと構造体train_infoがあります。
分からないのは、それぞれの構造体メンバーの中にお互いの一方の構造体宣言をしているせいで、どこまで構造体の実体があるのか全体像が掴めません。
頭の中では、
block_infoの中にtrain-infoがあって、train_infoの中にblock_infoがあって、、、、と無限ループになっており、どこまで続くねんとなっています。
構造体の実態はどのように表現することができますか?
2022.11.20 18:59
jjon-comさん(No.2) 
FE シルバーマイスター
https://www.fe-siken.com/kakomon/30_aki/pm09.html

の図1の実体は、区間が0〜8、列車が0〜4ですから、次のような配列になります。

区間[] blocks[]
+―+―+―+―+―+―+―+―+―+
|  |  |  |  |  |  |  |  |  |
+―+―+―+―+―+―+―+―+―+

列車[] 
+―+―+―+―+―+
|  |  |  |  |  |
+―+―+―+―+―+

上図ではたった1つの
+―+
|  |
+―+
で描いている要素の中身が、block_info型の構造体だったり、train_info型の構造体だったりするわけです。

各要素の中身を図示するとこんな感じ。

区間[0]
+―――――――――――+
| 列車[4]を指すポインタ|
+―――――――――――+―――――――――――+
| 区間[2]を指すポインタ|    NULLポインタ  |
+―――――――――――+―――――――――――+
|    赤を表す定数値    |
+―――――――――――+

区間[1]
+―――――――――――+
| 列車[3]を指すポインタ|
+―――――――――――+―――――――――――+
| 区間[2]を指すポインタ|    NULLポインタ  |
+―――――――――――+―――――――――――+
|    赤を表す定数値    |
+―――――――――――+

区間[2]
+―――――――――――+
|    NULLポインタ  |
+―――――――――――+―――――――――――+
| 区間[3]を指すポインタ|    NULLポインタ  |
+―――――――――――+―――――――――――+
|    緑を表す定数値    |
+―――――――――――+

区間[3]
+―――――――――――+
| 列車[2]を指すポインタ|
+―――――――――――+―――――――――――+
| 区間[4]を指すポインタ| 区間[4]を指すポインタ|
+―――――――――――+―――――――――――+
|    赤を表す定数値    |
+―――――――――――+
(以降、省略)


列車[0]
+―――――――――――+
|  0                  |
+―――――――――――+
| 区間[8]を指すポインタ|
+―――――――――――+

列車[1]
+―――――――――――+
|  1                  |
+―――――――――――+
| 区間[5]を指すポインタ|
+―――――――――――+
(以降、省略)


> block_info【※1】の中にtrain-infoがあって、
> train_infoの中にblock_info【※2】があって、、、、
> と無限ループになっており、どこまで続くねんとなっています。

という文の中の【※1】と【※2】は同じ実体であり自分から自分に戻って来ているのではなく、

区間[0]【※1】の中に、区間[2]【※2】を指すポインタがあって

というように、そのデータ型(構造体)が同じなだけで、別の実体を指しています。
2022.11.20 21:38
匿名希望さん(No.3) 
自分でも実際にblock[x]とtrain[y]という形で,実際にxとyに数字を入れてみました.
納得できました.block_infoの中にtrain_info,そしてtrain_infoの中にblock_infoは存在しましたが,実際に当てはめてみると無限ループしているわけではないことが分かりました.
block[0]のメンバtrainは区間0にいる列車4のポインタを指していて,
その列車4の構造体の中のblock_infoは終着するblock[8]のポインタが入っているだけ.(←型が同じなだけでループしている訳ではない)
そのblock_infoなblock[8]には区間8にいる列車0のポインタが入ってて・・・・
というように,ある意味無限につながってそうですが,
実体はその区間とそこにいる列車のポインタ,次区間のポインタ,ここの区間の信号
で一つのくくりなんですね.
やっと理解できました.ありがとうございます。
2022.11.20 22:16

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop