こんにちは､ お帰りなさい｡
構造体､ 特にネストされた構造体､ 構造体の中にネストされた構造体について詳しく説明します｡
ということなんです｡
つまり､ それ自体が他の構造体をメンバとして含む構造体を定義することができます｡
ここは､ かなりきちんとしたコンセプトになっています｡
構造体の中に構造体を持つことができます｡
というわけで､ 年の中の月日を論理的にまとめて､ 日付という構造にすることが可能であることがおわかりいただけたと思います｡
この日付の例にはこだわっているんです｡
では､ 実際に時間､ 分､ 秒をグループ化して構造化する場合はどうでしょうか｡
それも便利そうですね｡
つまり､ ここには時間という構造があり､ それは今日でも非常によく似ているのです｡
3つの要素を含んでいます｡
構造体の名前がtimeであることは､ structキーワードの後に続くので､ それがタグ名であることが分かります｡
そして､ 中括弧の中で､ 要素､ データ型､ 変数名を定義します｡
そして､ 必要であれば､ そこに配列を入れることもできることがわかりました｡
しかし､ この場合､ 配列は必要なく､ 3つの整数が必要なだけです｡
右中括弧とセミコロンで構造を終了させる｡
でも､ どうなんでしょう？
アプリケーションによっては､ 日付と時刻の両方を実際にグループ化したい場合があります｡
それはそれで意味があるのでしょう？
だって､ 日付と時刻が論理的に整理されているというか､ 論理的に一緒になっているんでしょう？
論理的にグループ化されている
つまり､ 特定の日付の時間帯に発生するイベントのリストを設定することができるのです｡
このように､ 入れ子構造を利用するのは非常に便利なケースかもしれませんね｡
つまり､ 日付と時間の両方を一緒に関連付けることができる便利な方法なのです｡
例えば日付と時間という新しい構造を定義することができる｡
これは､ 構造体である日付と時刻の2つの要素をメンバーとして含んでいます｡
これで入れ子構造になったわけです｡
日付と時間という名前の構造体があり､ その中に他の2つの構造体が含まれています｡
構文にあるようなものは､ 他の構造体を作るのとよく似ていますね｡
ここで違うのは､ 要素名として実際の構造体の中にあるものだけです｡
struct キーワード､ struct 名､ 変数名の順に指定します｡
この場合､ 日付と時刻の構造体を作成し､ 2つの構造体､ 1つは日付型､ もう1つは時刻型になります｡
2つの変数stateとS time｡
構造体の最初のメンバはstrike date型で､ SE Dateと呼ばれています｡
日付と時刻の構造体の2番目のメンバーはstrike time型で､ se timeと呼ばれる｡
struct date and time 型の変数を定義できるようになりました｡
日付用の変数､ 時間用の変数を別々に作る必要はないのです｡
この構造体は､ 日付と時刻の両方を格納することができます｡
それをそのままやってしまうのです｡
強いキーワードを使い､ 構造体の種類､ 日時を指定し､ そして変数名を指定することになる｡
この場合､ イベントを保存することになる｡
そこで､ 入れ子構造になっているメモリにアクセスしたいときに､ イベントと言うわけです｡
ここでも､ かなりわかりやすい構文になっています｡
他のメンバーと同じように参照するだけです｡
そのメンバー選択演算子を使わなければならない｡
だから､ かなり何度も使うことになる｡
つまり､ eventという名前の構造体があり､ 日付を取得したい場合は､ event dateと言います｡
これは､ この日付と時刻の構造体のメンバだからです｡
さて､ ある状態の中の特定のメンバーを再び参照したい場合は､ 末尾に付けられた番号名でピリオドファイルを使用することになります｡
つまり､ eventに含まれる日付構造体の月を10月に設定し､ 時間構造体に含まれる秒に1を追加しているのです｡
つまり､ イベントステートと言い､ さらにドットをつけるのは､ ステート変数の要素にアクセスしたいからです｡
月にアクセスしたいので､ 月10を割り当てます｡
つまり､ そこには複数の点があるのです｡
つまり､ eventという名前の構造体を持っているということです｡
そして､ さっきの宣言で､ 型､ 日付､ 時刻と言ったからです｡
この中には構造体があり､ これは単なる日付構造体で､ その日付構造体の月メンバにアクセスしたいだけです｡
ドットマンスからドットマンスと言うわけですね｡
そして､ 2番目の増分を1つずつ変更したい場合は､ プラスと言えばいいのです｡
プラスは､ 実装前の演算子プラス・イベントをタイムポイント秒として使用することができます｡
この2つのドットを含めなければならないし､ secondsは整数なので､ それに1が加算されるだけなのです｡
非常にわかりやすい｡
イベント変数は､ 通常の構造体と同様に初期化することができる｡
変数eventの日付を2015年2月4日､ 時刻を330に設定したい場合は､ start date and time
eventとなります｡
通常と同じように作成することになります｡
そして､ 異なる構造体の初期化メンバを指定するために中括弧を付けます｡
そこで､ 最初の中括弧で､ 日付を初期化し､ 月を2つの2月､
データを1つ､ 年を2015に初期化します｡
そして､ 中括弧を終わらせ､ その中括弧の後にカンマを入れるのです｡
そして2つ目は､ 多次元配列の初期化のような見た目です｡
時間はゼロで330に等しくなると言っています｡
つまり､ 3時間30分0秒｡
他の初期化ルールと同じように､ メンバー名と初期化を使用することができます｡
そうすれば､ 順番を指定する必要がなくなるので､ メリットがあります｡
そして､ ここではイベントを作成するだけです｡
そして､ 中括弧の中では､ ドットを使用します｡
オペレーター
月イコール2日イコール1年イコール2015年と言います｡
そして､ それは日付の初期化を指定するだけです｡
もし､ 時間の初期化を指定したい場合は､ 再び各メンバー名ドットドット分を使用すれば､
順番を入れ替えることができるのです｡
そうだろ？
我々は､ ドット秒､ SQLの0/1､ そして分が30に等しいと言うことができ､ その後､ 私たちの3つのB最後｡
順番は関係ありません｡
そして､ セミコロンとカーリーで終わらせています｡
右､ 中括弧｡
さて､ 構造体を入れ子にできることはわかりましたが､ 構造体を入れ子にした配列はどうでしょうか？
今､ 私たちは本当に夢中になっているんです｡
ええ､ 可能です｡
日付､ 時刻の配列が設定でき､ 日付と時刻はその中に2つの構造体を含んでいます｡
他の普通の構文と同じようにやればいいのです｡
この括弧で配列の大きさを指定するのです｡
実際の構造体名を宣言する際には､ 他の構造体と同様に of type の date time を指定する必要があります｡
配列eventは､ 型､ struct､ date､ timeの100個の要素を含むと宣言されています｡
配列に含まれる4番目の日時は､ これらの角括弧の中にある通常のインデックスsub threeまたはindex threeまたはsubscript
threeを使って参照されます｡
SW timeはtime構造体を指すので､ time構造体の要素（hours）にアクセスする必要があるからです｡
そこで､ もう1つのドットを使って12と言うわけです｡
前の宣言や代入と非常によく似ていますが､ 代わりに配列のインデックス0が角括弧の中に入っています｡
もしeventsが配列でなく､ 単一の構造体や時間の構造体にアクセスしたいだけなら､ ブラケットを取り除くだけでよいでしょう｡
だから､ アレイは何も複雑化させない｡
角括弧とインデックスを使いこなすだけでいいんです｡
これです｡
分単位をゼロイベントサブゼロに設定しています｡
つまり､ 最初の要素を設定し､ 次に秒数をゼロに設定するのです｡
さて､ 構造体の中に構造体を宣言する場合｡
時間構造定義の中で､ 日付構造を定義することができます｡
これもまた､ 柔軟性の範疇なんですね｡
必ずしも日付と時間の構造をどこかで定義しておく必要はないのです｡
これらの構造は､ 日付と時刻の構造の中で正しく定義することができます｡
ここでは､ 日付構造体を時間構造体の中に定義する例を示します｡
ここでは､ ネストされた構造体がありますが､ 実際にはtime構造体の定義の中で定義しています｡
そこで､ タグ名でstruct timeと言い､ 中括弧の中でstruct dateと言います｡
それは至極当然なことです｡
また､ 開始日の終わりのセミコロンの前に､ DOBという変数が作成されていることにお気づきでしょうか｡
そして､ 開始日とその要素を変数DOBに作成した後､ 時間開始の時間､
分､ 秒の要素を指定します｡
だから､ それはまったく問題ない｡
さて､ この打刻された日付は､ DOBという変数名で一度だけ定義されることになる､
という制限にお気づきでしょうか｡
これ以外の場所では､ 日付構造を使用することはできません｡
インサイドタイムを使用しない限り､ date単体で使用することはできません｡
つまり､ 日付構造体の宣言は､ 時間構造体のスコープで囲まれているのです｡
定義スコープとは､ 日付構造が時間というスコープにあるため､ どのように物事にアクセスできるかを指す｡
時間変数time struct変数を作成しないとアクセスできません｡
struct date my 変数名にはアクセスできないからです｡
つまり､ 日付は時間の構造体の外には存在しないのです｡
時間構造の外部に日付変数を宣言することは不可能です｡
日付構造体変数を使用できるのは､ 時間構造体を作成するときだけで､ 自動的にDLB変数が作成されます｡
つまり､ これはやや限定的ですが､ 日付が必要なのは時刻と関連付けられている場合だけで､ 日付が単独で必要なことはない､
という場合に使用します｡
そうすると､ こんな風にするんですね｡
つまり､ もう一つの膝のコンセプト､ 構造の中に構造を提供するというコンセプトは､ 非常に基本的なものです｡
そして､ その構文はとてもシンプルです｡
構造体を含む構造体に配列を追加する､ これらには簡単に慣れることができるでしょう｡
インデックスにある角括弧を使うだけです｡
そこは特に何も変わりません｡
そして､ フォーマットを少し変えてみる｡
ローカルにネストした構造体だけが必要な場合は､ 他の構造体定義のすぐ内側で定義することができます｡
私たちは､ この構造タイプの専門家になりつつあるのです｡
特に､ 構造体の中にポインタを作成する方法について説明したいと思います｡
そして､ いくつかのチャレンジとエクササイズを行うことで､ この構造の概念に本当に親しんでいただけると思います｡
ありがとうございます｡