構造体のポインターの例をリスト3にしめす.図 2にポインターと構造体の関係を示す.リストを見て分かるように, 構造体へのポインターは次のようにして使う. -4pt
1 #include <stdio.h>
2
3 int main(void)
4 {
5 typedef struct{ // 構造体の定義
6 char name[16];
7 int math;
8 int info;
9 }student;
10
11 student yama={"yamamoto",72,83}; // 宣言と初期化
12 student *p; // 構造体 student 型へのポインター
13
14 p=&yama; // 先頭アドレスの代入
15
16 printf("name = %s\n", p->name); // メンバーへのアクセスは,アロー演算子
17 printf("math = %d\n", p->math);
18 printf("info = %d\n", p->info);
19
20 return 0;
21 }
name = yamamoto math = 72 info = 83
| hoge[i] |
1 #include <stdio.h>
2
3 int add(int i, int j); // プロトタイプ選言
4
5 //============ メイン関数===============================
6 int main(void)
7 {
8 int (*fp)(int, int); // 関数へのポインター
9
10 fp=add; // 関数のアドレスを代入
11
12 printf("%d\n",fp(5,9));
13
14
15 return 0;
16 }
17
18 //============ ユーザー定義関数==========================
19 int add(int i, int j)
20 {
21 return i+j;
22 }
14
これは使い方によってはかなり便利である.サブルーチンへ関数を渡すことが可能となる. リスト5がそれを使った例である.ここで,関数定義の仮引数の double (*f)(double)が関数へのポインターの宣言で,
戻り値の型 (*関数へのポインター変数)(引数の型)と書く.この関数へのポインター変数に関数のポインター--先頭アドレス--を代入する と,ポインター変数が関数のように使える.関数のポインターへの代入は関数名を右辺値 として,代入するだけである.
1 #include <stdio.h>
2 #include <math.h>
3
4 void print_func(double (*f)(double)); // プロトタイプ選言
5
6 //======== メイン関数 ========================================
7 int main(void)
8 {
9
10 print_func(sin);
11 print_func(cos);
12
13 return 0;
14 }
15
16 //========== 関数の値を表示する関数 ============================
17 void print_func(double (*f)(double))
18 {
19 int i;
20 double dx=0.1;
21
22 printf("--------------------------\n");
23 for(i=0; i<=5; i++){
24 printf("%f\t%f\n", i*dx, f(i*dx));
25 }
26 }
-------------------------- 0.000000 0.000000 0.100000 0.099833 0.200000 0.198669 0.300000 0.295520 0.400000 0.389418 0.500000 0.479426 -------------------------- 0.000000 1.000000 0.100000 0.995004 0.200000 0.980067 0.300000 0.955336 0.400000 0.921061 0.500000 0.877583
1 #include <stdio.h>
2
3 int main(void)
4 {
5 char *animal[]={"cat", "dog", "rabbit", "horse"};
6
7 printf("1st : %s\n", animal[0]);
8 printf("2nd : %s\n", animal[1]);
9 printf("3rd : %s\n", animal[2]);
10 printf("4th : %s\n", animal[3]);
11
12 return 0;
13 }
1st : cat 2nd : dog 3rd : rabbit 4th : horse
int **hoge, *fuga, a; fuga=&a; hoge=&fuga;
あまり深入りしないことにする.