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
© Copyright 2024 ExpyDoc