• ベストアンサー

構造体について

凄く初歩的な質問で申し訳ありませんが… 入門書の構造体のところで 以下のようなプログラムの例がありました。 #include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ >char name[20] というのは、NAMEの領域を20文字 確保すると言うことですよね? >struct seiseki seito1, seito2[20] ここの箇所が分からないのですが seito2[20]の20というのは どうして20なのですか? NAMEだけではないので もっと大きな数字になるような気がするのですが… またseito1の方は どうして数字が何もないんですか? 考え違いをしているところを ご指摘して頂ければ幸いです。

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

  • ベストアンサー
  • Hardking
  • ベストアンサー率45% (73/160)
回答No.4

seiseki構造体(成績情報)の内訳項目は int no; //名簿番号 char name[20]; //名前 double averageint; //平均点 の3項目ですね。 まず、char name[20]ですが20文字の領域ではなく 20バイトの領域です。 半角文字は1文字が1バイト。 全角文字は1文字が2バイト。 次に構造体変数 seito1 seito2[20]についてですが seito1は、生徒1人分の成績情報を保持する変数です。 ┌───────┐ │ seito1 │ ├───────┤ │ no │ │ name[20] │ │ average │ └───────┘ seito2は、最大生徒20人分の成績情報を保持する変数です。 ┌───────┐ ┌───────┐ ┌───────┐ │ seito2[0] │ │ seito2[1] │ │ seito2[19] │ ├───────┤ ├───────┤ ├───────┤ │ no │ │ no │...│ no │ │ name[20] │ │ name[20] │ │ name[20] │ │ average │ │ average │ │ average │ └───────┘ └───────┘ └───────┘ 変数名に数字があるseito2を、配列変数です。 seito1は配列にする必要が無いので、変数名に数字はつきません。 以上。

niiza
質問者

お礼

大変に分かりやすいご説明 ありがとうございました こんな私でも理解することが出来ました

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

変数と配列を並べて書いて、名前もseito1, seito2なので紛らわしいかも struct seiseki suzuki; /* 鈴木君の構造体*/ struct seiseki itikumi[20]; /* 1組の生徒20人分の構造体 */ なら少しわかりやすいかも

niiza
質問者

お礼

大変に分かりやすいご説明 ありがとうございました こんな私でも理解することが出来ました

  • LESQUA
  • ベストアンサー率11% (1/9)
回答No.2

ごめんなさい、速攻間違えましたm(_ _)m >としてアクセスできますが、seito2の場合では(例えば10番目の人は) 添え字は0から始まってますので10番目の人は  seito2[9].average でした。

  • LESQUA
  • ベストアンサー率11% (1/9)
回答No.1

>というのは、NAMEの領域を20文字 >確保すると言うことですよね? はい、そうです。 >seito2[20]の20というのは >どうして20なのですか? 生徒20人分のデータだからだと思います。 NAMEの20とは違った扱いになります(問題が紛らわしいですねw) struct seiseki { /* 構造体の宣言 */  int no;  char name[20];  double average; }; int main(void) {  int i;  struct seiseki seito1, seito2[50]; とかにしたほうが、混乱が少なくていいでしょう。 >またseito1の方は >どうして数字が何もないんですか? たぶん、一人の時と複数人の時の差を教えたかったのだと思います。 seito1であれば直接  seito1.average としてアクセスできますが、seito2の場合では(例えば10番目の人は)  seito2[10].average となります。

niiza
質問者

お礼

大変に分かりやすいご説明 ありがとうございました こんな私でも理解することが出来ました

関連するQ&A