平成30年秋期午後問9 構造体の全体像が掴めません
匿名希望さん
(No.1)
C言語の構造体を完璧に理解できていない前提ですが、構造体block_infoと構造体train_infoがあります。
分からないのは、それぞれの構造体メンバーの中にお互いの一方の構造体宣言をしているせいで、どこまで構造体の実体があるのか全体像が掴めません。
頭の中では、
block_infoの中にtrain-infoがあって、train_infoの中にblock_infoがあって、、、、と無限ループになっており、どこまで続くねんとなっています。
構造体の実態はどのように表現することができますか?
分からないのは、それぞれの構造体メンバーの中にお互いの一方の構造体宣言をしているせいで、どこまで構造体の実体があるのか全体像が掴めません。
頭の中では、
block_infoの中にtrain-infoがあって、train_infoの中にblock_infoがあって、、、、と無限ループになっており、どこまで続くねんとなっています。
構造体の実態はどのように表現することができますか?
2022.11.20 18:59
jjon-comさん
★FE ゴールドマイスター
(No.2)
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]を指すポインタ|
+―――――――――――+
(以降、省略)
という文の中の【※1】と【※2】は同じ実体であり自分から自分に戻って来ているのではなく、
区間[0]【※1】の中に、区間[2]【※2】を指すポインタがあって
というように、そのデータ型(構造体)が同じなだけで、別の実体を指しています。
の図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のポインタが入ってて・・・・
というように,ある意味無限につながってそうですが,
実体はその区間とそこにいる列車のポインタ,次区間のポインタ,ここの区間の信号
で一つのくくりなんですね.
やっと理解できました.ありがとうございます。
納得できました.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日経過したスレッドへの投稿はできません。
広告