配列とは違って、異なるデータ型の変数やデー タをまとめて扱える! 第11章 構造体 1 変数のアドレスを格納できる変数 ポインタ変数 ポインタに『*』をつけることでアドレス先の 変数と同じ扱いができる 配列名は配列の先頭の変数のアドレスと同じ 配列を関数に渡す時、ポインタとして受けるこ とができる 前回のスライドまんまです 第11章 構造体 2 構造体 ヘッダーファイルの自作と展開 第11章 構造体 3 複数の異なる型の変数を、まとめてひとつの データ型で扱うというもの 使用の手順 型枠の宣言 ↓ 構造体の宣言 ↓ 初期化・参照 第11章 構造体 4 構造体の型枠の宣言 struct list { char num[1024] ; int age ; }; ここでいう「list」とは、構造体の型枠の名前で タグ名と呼ばれる(つまり自由に決めてよい) {}内では、この構造体で使う変数が宣言する {}の終わりに『;』がつく! 第11章 構造体 5 構造体の宣言 struct list member[20] ; ここでいう「member」が構造体の名前になる。正確 には構造体変数名 またこれは配列なので、構造体配列となる 第11章 構造体 6 構造体の初期化・参照(使い方) member[0].name = “MMC” ; printf(“%s\n”, member[0].name); それぞれの構造体変数の中を参照する場合は、『.』 を使い、指定することになる 今回は「member[0]」構造体の「name」を参照し ている 構造体も変数の一種なので、初期化は 必ず行うこと!! 第11章 構造体 7 まとめ & 実行例 構造体も、関数と同じく main 関数よりも前に 宣言をしておく #include <stdio.h> struct list{ char name[1024]; int age ; }; int main(){ struct list mem; printf(“名前 : ”); scanf(“%s”,&mem.name); printf(“年齢 : ”); scanf(“%d”,&mem.age); printf(“%s %d歳\n”, mem.name, mem.age); return 0; } 第11章 構造体 8 実行結果例 ほかにも、構造体の中に構造体を入れたり(構造 体の入れ子)、関数に構造体を送ったりできる 今回はやらないけど 第11章 構造体 9 ヘッダー(ヘッダ)ファイルとは プログラムで使うような関数(サブルーチン)、変数、 その他何某かの宣言が入ったファイル これをソースファイル(いつも使っているcppファイル のこと)で、展開(include)することで、中に入った 色々な要素を使用できる 例: #include <stdio.h> 第11章 構造体 10 ヘッダーファイルの自作 『プロジェクト(P)』⇒『新しい項目の追加』⇒ 『ヘッダーファイル』⇒ 名前の入力 ⇒『追加』 今回は「define」という ファイル名にしました 第11章 構造体 11 ヘッダーファイルには以下の記述を入力 struct list{ char name[1024]; int age; } 逆にソースファイルでは、この記述を抜き、下 の一文を挿入 #include <stdio.h> #include “define.h” int main(){ 同じなので省略 第11章 } 構造体 12 実行結果は先ほどと同じ これは、ヘッダーファイル内の宣言を、ソース ファイルで参照したということ 第11章 構造体 13 構造体の型枠の宣言を、自作のヘッダーファイ ルで行い、以下のリストにある5人のプロ フィールを入出力するプログラムを作ってみよ う 氏名 年齢 性別 坂部真一 21 男 伊藤和久 36 男 斉藤恵美 27 女 山井修二 54 男 大森愛華 18 女 性別はbool型の変数で 表示する時に「男女」 の区別をつけるといいかも 第11章 構造体 14 ソース コード のほう かなり 見づら いので、 気にな るとこ ろは聞 いてね #include <stdio.h> #include "define.h" int main(){ int num = 5; list mem[5]; for(int i=0; i < num; i++){ printf("名前 : "); scanf("%s",&mem[i].name); printf("年齢 : "); scanf("%d",&mem[i].age); if(mem[i].age < 0 || mem[i].age > 120){ printf("不正な値が入力されました。\n"); return 0; } printf("性別が男なら0、女なら1を入力 : "); scanf("%d",&mem[i].seibetsu); if(mem[i].seibetsu != 0 && mem[i].seibetsu != 1){ printf("不正な値が入力されました。\n"); return 0; } for(int i=0; i < num; i++){ printf("%s %d歳 ",mem[i].name,mem[i].age); if(mem[i].seibetsu == 0) printf("男\n"); else printf("女\n"); } return 0;} 15 第11章 構造体 こちらはヘッダーファイル struct list{ char name[1024]; int age; bool seibetsu; }; ちなみに、ソースファイルを良く見ると、不正 な値を入力すると、プログラムを終了する仕組 みになってますね 第11章 構造体 16 ランダムな値 その他いくつかの事項(マクロとか) 次章でC言語講習は最後!! 第11章 構造体 17 テンプレ 第11章 構造体 18
© Copyright 2024 ExpyDoc