博士「?」

な~にをしておるのかの?
随分ご機嫌がよさそうじゃが・・・


ぷうさん「(^^♪」

何って?当たり前でしょ?新しいゲームが届いたんだもん。
と、言うわけで、今口はCはお休みね。


博士「怒」

そうは問屋が下ろさんぞ!


困った顔のぷうさん

いいじゃない~、一日くらい休憩入れたってえ~・・・


博士「×」

だ~めじゃ!


ぷうさん「怒」

やだっ!今日は休みにするのっ!


博士「怒」

・・・・。

///博士がちょっと席をはずしたら、使っているパソコンが使えなくなってしまった。

困った顔のぷうさん

あぁ”っ!!


博士

ほれほれ、このくらいの事は朝飯前なんじゃぞ。


ぷうさん「怒」

何やったー、博士ー!!
ひっきょうものぉー!


博士「(^^♪」

ゲームをやりたければ、さっさと今日の分を片付け・・・じゃない、じっくりと理解するまでやるぞ!
今日の分が終わった後なら思う存分ゲームをすればよいのじゃ!


ぷうさん

ほ~ら、自分だって早く終わりたいくせにぃ・・・


困った顔の博士

・・・早く終わりたかったら、どんどん吸収することじゃな。
ほれ、今日は構造体じゃぞ!


困った顔のぷうさん

聞いただけで、難しそう・・・


博士

案ずるより産むが安しじゃ。
じっくりやれば、分かるじゃろう。


ぷうさん

私でも、でしょ?


困った顔の博士

い、いや、そうとは言っておらんじゃろ?


ぷうさん「怒」

言ってるようなもんだって!

構造体の宣言方法

構造体の形式の指定
struct タグ名 {メンバー; メンバー; ・・・};

  • タグ名:変数のグループ名
  • メンバー:構造体を構成する変数
例:
struct 名簿 { int 番号; char 名前[20]; };
番号、名前のグループに、名簿という名前をつけた。
構造体の形式を指定しただけで、メモリに領域が取られるわけではない。
構造体の宣言
struct タグ名 構造体変数名;

タグ名の領域をもった構造体を、変数名で作る

例:
struct タグ名 構造体変数名;
メンバ演算子 “.”
構造体を構成するメンバを指定する場合は、「.(ピリオド)を使う。」

構造体は運命共同体の変数!?

ぷうさん「OK」

つまり、そのタグという鎖で繋がれたグループは、運命共同体てわけね?
金魚と金魚の糞のようなもんで、切ろうとしても切れないんだ!


困った顔の博士

もう少しきれいな表現はできんものかの?


困った顔のぷうさん

・・・う~んとぉ・・・


博士「ここをチェックじゃ」

そんなに真剣に悩まんでも・・・・運命共同体ってのはまあまあかの?
とにかくじゃ、ある件についていくつかの項目があった場合、こっちのファイルからあっちのファイルにデー夕を写したい時なんか便利じゃぞ。
普通の変数でコピーするなんていうと本当に面倒じゃ。
しかし構造体を使えば、まとめでコピーできてしまうんじゃ。


ぷうさん「(^^♪」

いらなくてもついてくるモーニングセット!


博士

何を言っとるか、お前さんの場合それが目当てなんじゃろが!


ぷうさん

ばれたか・・・・・

構造体のプログラム

#include <stdio.h>
//構造体の形式を宣言
struct メイボ { int バンゴウ; char ナマエ[20]; };

main()
{
   struct メイボ コウゾウタイ1;
   struct メイボ コウゾウタイ2={2, "Ika"};
   コウゾウタイ1.バンゴウ=1;
   strcpy (コウゾウタイ1.ナマエ, "Tako");
   printf("no1: %d:%s\n",コウゾウタイ1.バンゴウ, コウゾウタイ1.ナマエ );
   printf("no2: %d:%s\n",コウゾウタイ2.バンゴウ, コウゾウタイ2.ナマエ );

   //1番目のデータを2番目にコピー
   コウゾウタイ2=コウゾウタイ1;
   printf("no2: %d:%s\n",コウゾウタイ2.バンゴウ, コウゾウタイ2.ナマエ );
}

実行結果

no1: 1:Tako
no2: 2:Ika
no2: 1:Tako

チェックポイント

博士「ここをチェックじゃ」

一度構造体の形式を指定しておけば、いくつでも構造体を宣言することができるんじゃ。
このプログラムでは、「コウゾウタイ1」と「コウゾウタイ2」の2つを「struct メイボ」型」で宣言しておるのじゃ。









博士「Good!」

初期値を設定する場合は、{ }で囲んで順に並べていくんじゃよ。
一旦、構造体の形式を指定しておけば普通の変数のように宣言したり、関数への引数としたり、returnの戻り値として書いたりもできるんじゃ。
なんにしても、優れ物じゃーて!


ぷうさん「こちら」

XXショッピング。
あれも、これも、もれなくついてくるすぐれもの!
今ならセットで1万円、1万円でお買い得っ!お申込みは、今すぐっ!


困った顔の博士

・・・・・スイッチ処理の仕方、間違ぉとらんかの?


ぷうさん「(^^♪」

天然フレキシブルスイッチですんで・・・


困った顔の博士

やっぱし☆

構造体で配列を使ってみよう。

博士

まずは構造体で配列を使ってみるのじゃな。
教科書を見てやってみようかの。

構造体配列のプログラム用の名簿

  meibo
メンバー bangou name[10] cobol casl goukei
int型 chari型 int型 int型 int型
data[0] 1 Tako 100点 100点
data[1] 2 Ika 100点 90点
data[2] 3 pu 50点 10点

構造体配列のプログラム

#include <stdio.h>
//構造体meiboの形式の指定
struct meibo {
   int bangou;
   char name[20];
   int cobol;
   int casl;
   int goukei;
};
main()
{
   //struct meibo型の配列dataを宣言
   struct meibo data[] {
      {1,"Tako",100,100,0} ,
      {2,"Ika",100,90,0} ,
      {3,"pu",50,10,0} ,
   };
   int i;

   for(i=0;i<=2;i++) {
      data[i].goukei=data[i].cobol+data[i].casl;
      printf("%d:%s %d %d %d\n",data[i].bangou,
                                data[i].name,
                                data[i].cobol,
                                data[i].casl,
                                data[i].goukei
      );
   }
}

実行結果

1:Tako 100 100 200
2:Ika 100 90 190
3:pu 50 10 60

博士「?」

なんじゃ、さっきと(教科書)と点数が違うじゃないかの。


困った顔のぷうさん

名前も本と変えたからねえ・・・。
点数が本のままだとだーれかさんに頭を叩かれそうで・・・。

その二 構造体の値渡しへ

六日目 構造体について 目次

五日目へ

ぷうさんの七日間戦争 六日目

七日目へ