Transcript 構造体

配列とは違って、異なるデータ型の変数やデー
タをまとめて扱える!
第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