• ベストアンサー

構造体について

私は今プログラミング(C++)を勉強しているのですが、構造体に苦戦しています。分からないことがいくつかあります。もし知っていたらどれでもいいですので、よろしければ教えてください。 1、たとえば構造体を宣言するときに struct abc{ int s; struct abc xx; struct abc yy; }; と宣言するときがあります。でも上記の例と下記の例との違いが分かりません。 struct abc{ int s; struct abc xx; struct abc yy; }abc; 2、たとえばメインの最初にこのように宣言されているとします。 int j, i; struct abc *kk, *nn, *mm; これはここに宣言したものがローカルで、1のときに宣言したものがグローバルと考えていいのでしょうか? 3、メインの中に次のようなプログラムがあったとします。 kk->xx = j; kk->yy = j; nn->yy = NULL; i = kk->xx; i = kk; これらがそれぞれどのような意味があるのでしょうか。 これらでわかることがあればぜひ教えてください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

1. 質問の内容では紛らわしいです。 struct abc{  int s;  struct abc xx;  struct abc yy; } abc; ではなく struct abc{  int s;  struct abc xx;  struct abc yy; } data; 等とした方が理解しやすいです。 後述の方は struct abc data; と宣言しているのと同じ意味を持ちます。 つまり、「構造体の定義」と「定義した構造体で変数を宣言する」ことを同時に行っています。 2. >これはここに宣言したものがローカルで、1のときに宣言したものがグローバルと考えていいのでしょうか? 「ローカル」「グローバル」の意味は理解されていますか? 変数宣言だけでは「ローカル」「グローバル」の判別はできません。 変数の宣言されている「場所」により判別します。 例えば、関数の中に構造体の定義と変数宣言を行っていれば、それは「ローカル」ということになります。 3. >これらがそれぞれどのような意味があるのでしょうか。 2.の続きですか? 「->」は「アロー演算子」といい、構造体のポインタを使用している場合にメンバに対して値をやり取りする場合に使用します。 ところで、質問のプログラムは何かの記述を正確にコピーしていますか? 一部おかしいところがありますよ。

その他の回答 (1)

  • 64bit
  • ベストアンサー率51% (45/88)
回答No.2

回答ではありませんが、 struct abc{ int s; struct abc xx; struct abc yy; }; これは間違っています。 struct abc型の定義の中でstruct abc型の変数を宣言してはいけません。 セミコロンの前の時点では struct abc は不完全型で、ポインタを宣言することしかできません。 そもそも、こんな構造体があったらサイズが無限になって大変です。

関連するQ&A