構造体のポインターも,通常の変数と同じように使うことができる.その例をリスト
4に示す.この例では,構造体のポインターをユーザー定義関数ととも
に用いている.以下,その方法を示すが,アロー演算子の他は通常の変数と同じ取り扱い
である.
- 構造体のポインターの宣言は,アスタリスク(*)をつける(17行目).通常の変数と同じ.
- 仮引数がポインターで宣言された関数(10行目と36行目)を呼び出すときに,渡す
実引数はアドレスである(20行目).変数からアドレスを引き出すときに
は&演算子をつかう.
- 構造体のポインターを戻り値にすることもできる(10行目と36行目).
- 構造体のポインターをつかってメンバーにアクセスする場合,矢印(アロー)演算
子を使う.
1 #include <stdio.h>
2 #include <string.h> // strcpy を使うため
3
4 typedef struct{ // 構造体型 student の定義
5 char name[80];
6 int math;
7 int eng;
8 } student;
9
10 student *better(student *st1, student *st2); //プロトタイプ宣言
11
12 //=========================================================
13 // メイン関数
14 //=========================================================
15 int main(void)
16 {
17 student shimada, yamamoto, *yoi;
18
19 strcpy(shimada.name,"shimada masaharu");
20 shimada.math = 92;
21 shimada.eng = 88;
22 strcpy(yamamoto.name,"yamamoto masao");
23 yamamoto.math = 42;
24 yamamoto.eng = 61;
25
26 yoi = better(&shimada, &yamamoto); // アドレスを送る
27
28 printf("平均点が高い方は,%sです.\n",yoi->name);
29
30 return 0;
31 }
32
33 //=========================================================
34 // 平均点を計算するユーザー定義関数
35 //=========================================================
36 student *better(student *st1, student *st2)
37 {
38 int av1, av2;
39
40 av1 = (st1->math + st1->eng)/2; // アロー演算子を使い
41 av2 = (st2->math + st2->eng)/2; // メンバーにアクセス
42
43 if(av1<av2){
44 return st2;
45 }else{
46 return st1;
47 }
48
49 }
平均点が高い方は,shimada masaharuです.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年4月17日