home *** CD-ROM | disk | FTP | other *** search
- /* jumptbl.c */
- /* ジャンプテーブルのテスト(処理内容に意味無し) */
- #include <stdio.h>
- #include <stdlib.h>
-
-
- /* 関数プロトタイプ宣言 */
- int FuncTest0 (int, int);
- int FuncTest1 (int, int);
- int FuncTest2 (int, int);
-
-
- /* 関数へのポインタの配列 */
- /* int の引き数を2つ受け取り、返り値は int である関数へのポインタの配列 */
- typedef int (*func_test) (int, int);
- func_test FuncTest[] =
- {
- FuncTest0,
- FuncTest1,
- FuncTest2,
- };
-
-
- int FuncTest0 (int i, int n)
- {
- printf ("関数 FuncTest0() を実行しました 実行回数は %d 回目です\n", n);
- return (i);
- }
-
- int FuncTest1 (int i, int n)
- {
- printf ("関数 FuncTest1() を実行しました 実行回数は %d 回目です\n", n);
- return (i + 1);
- }
-
- int FuncTest2 (int i, int n)
- {
- printf ("関数 FuncTest2() を実行しました 実行回数は %d 回目です\n", n);
- return (i * 2);
- }
-
-
- void FuncEnd (int n)
- {
- printf ("関数 FuncEnd() を実行しました 実行回数は %d 回目です\n", n);
- }
-
-
- int main (int argc, char *argv[])
- {
- int i, j;
- int n = 1; /* 何回目か */
- void (*func_end) (int n); /* 終了関数へのポインタ */
-
- /* 実験その1・関数へのポインタの配列 */
- for (;;) {
- printf ("0 から 3 の数字を入力して下さい(3 で終了)\n");
- scanf ("%d", &i);
- if (i == 3)
- break;
-
- j = FuncTest[i] (i, n); /* 各ルーチンへ飛ぶ(関数へのポインタ) */
- printf (" 結果は %d です\n", j);
- n++;
- }
-
- /* 実験その2・関数へのポインタを変数に代入してみる */
- func_end = FuncEnd; /* 関数へのポインタは代入もできる */
- (*func_end) (n); /* FuncEnd() を実行する */
-
- return (0);
- }
-