第10週スライド

10回目
構造体、ポインタ
125
構造体
配列 同じ型のデータを
データを統一的に
統一的に扱うことが
できる。
できる。
より複雑
より複雑な
複雑な型のデータを
データを統一的に
統一的に扱う
構造体
ことは出来
ことは出来ないか
出来ないか?
ないか?
データベースへの
データベースへの応用
への応用
住所録:
住所録:名前、
名前、住所、
住所、電話番号 etc
126
構造体の定義
対応
struct meibo
{
int no;
char name[11];
int age;
};
int abc;
タグ名
タグ名:構造体全体に
構造体全体に対する
名前
メンバ
meiboのデータはどのように
引用するか?
引用例
x = abc;
127
1
構造体の利用
struct Student s;
(array)
int abc;
変数 s は meibo型の構造体
となる。
引用:
s.nen, s.no, s.name[0]
引用には構造体のどのメンバに
対するものであるか明示する必要
がある。
例題 7-2
メンバの引用法に注意
128
構造体と配列
文字列、
文字列、整数値、
整数値、実数値の
実数値の混在する
混在する「
する「配列」
配列」を定義できる
定義できる。
できる。
例題7-3
まず構造体を定義し、その構造体を要素と
する配列を定義する。
二段構えの定義に注意
参照するときの
参照するときの配列要素指定
するときの配列要素指定と
配列要素指定とメンバ名指定
メンバ名指定と
名指定と
の関係に
関係に注目する
注目する。
する。
129
ポインタ操作とは
メインメモリの
メインメモリのアドレスを
アドレスを意識した
意識した操作
した操作。
操作。
プログラム初学者
初学者に
プログラム
初学者にはやや難解
はやや難解である
難解である。
である。
メインメモリの
メインメモリの動作が
動作が分かっていれば理解
かっていれば理解はさほど
理解はさほど
困難ではない
困難ではない。
ではない。
コンピュータの
コンピュータの理解が
理解が深まる。
まる。
プログラミング学習
プログラミング学習の
学習の仕上げ
仕上げ(ファイル操作以外
ファイル操作以外では
操作以外では)
では)
として取
して取り組む。
130
2
参照呼び出しによる方法(再掲)
の内容とbの内容とを足
して変数p が示すアドレ
スの位置に代入。
y
p
メインメモリをアドレス記憶部
アドレス記憶部とし
q
て利用するか、データ記憶部
データ記憶部とし
て利用するか。
a
a+b
b
メインメモリには固有のアドレス
が存在し、そこにデータが格納さ
れる。
p, qにはアドレスが記憶される。
a, bにはデータの値が記憶される。
x
*p = a + b;
a
131
メモリのアドレス値とデータ値
を出力
例題 8-2 このままではプログラムではないので変数の
値を印字するように書き加える。
printf(“ Data %d Address %x ¥n”, ptr, &ptr);
printf(“ Data %d Address %x ¥n”, a, &a);
a
printf(“ Data %d Address %x ¥n”, b, &b);
b
ptr
はメインメモリでどのように並んでいるか?
a, b, ptr
132
ポインタ変数についてのまとめ
メインメモリへ書き込むデータとしてアドレスを使う。
ポインタ変数と
呼ぶ。
宣言
整数など普通のデータ
アドレス
a
b
int a;
int *b;
この型
この型の意味は
意味は?
はポインタ変数なので * を
付ける。
には アドレスしか書き込まれない。
b
b
133
3
データの種類とサイズ
例題 8-3
メインメモリで占めるサイズを
比較する。
int, char, float
double
などが並んでメインメモ
リに割り当てられると仮定す
る。
a
a, b, c
b
このような配置の場合はbのアドレス
からaのアドレスを引けばaのサイズ
となる。
c
134
ポインタと演算
例題8-4
まずポインタを使わずにプログラムを作成
種類の変数定義
アドレスを問題にする場合
int a, b, c;
int *aptr, *bptr;
2
&a, &b, &c
aptr, bptr, cptr
データ値を問題にする場合
a, b, c
*aptr, *btpr, *cptr
135
4