C 関数ポインタ 新しいページはコチラ
提供: yonewiki
(→関数ポインタ) |
(→関数ポインタ) |
||
| 52行: | 52行: | ||
メイン関数のようなスタートアップ関数は2回呼び出してはいけないことになっているので、最初の例で_tmain関数のアドレスを取得しましたが、調子に乗って関数ポインタを使って呼び出し処理をするようなことはしてはいけません。お忘れなく。たぶん、そんなことをしようと思う人はいないと思いますが…念のため。 | メイン関数のようなスタートアップ関数は2回呼び出してはいけないことになっているので、最初の例で_tmain関数のアドレスを取得しましたが、調子に乗って関数ポインタを使って呼び出し処理をするようなことはしてはいけません。お忘れなく。たぶん、そんなことをしようと思う人はいないと思いますが…念のため。 | ||
| + | |||
| + | |||
| + | 更に | ||
| + | |||
| + | |||
| + | ポインタで配列を扱うことができますので、関数ポインタも同様に配列のように扱うことができます。具体的には以下のように利用します。 | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #include "stdafx.h" | ||
| + | |||
| + | void example_function1(int n,int m){ | ||
| + | printf(”example_function1 %d %d”,n, m); | ||
| + | }; | ||
| + | void example_function2(int n,int m){ | ||
| + | printf(”example_function2 %d %d”,n, m); | ||
| + | }; | ||
| + | void example_function3(int n,int m){ | ||
| + | printf(”example_function3 %d %d”,n, m); | ||
| + | }; | ||
| + | |||
| + | int _tmain(int argc, _TCHAR* argv[]) | ||
| + | { | ||
| + | void (*pfuncExample[])(int,int) ={example_function1, | ||
| + | example_function2, | ||
| + | example_function3};//定義と配列初期化 | ||
| + | |||
| + | (*pfuncExample[0])(100, 200);//関数ポインタを使った関数の利用(呼び出し) | ||
| + | (*pfuncExample[1])(300, 400); | ||
| + | (*pfuncExample[2])(500, 600); | ||
| + | retrun 0; | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | という具合に使うことができます。サンプルは関数ポインタの配列利用のパターンを無理矢理に作りましたので、実用性がありませんが、配列番号だけで、動的に呼び出す関数を変えるようなプログラムにもできます。スッキリする場合もありますが、ややこしさも増幅する感じがあります。メモリの使い方が変わるので、処理速度改善が見込めるケースもあるかもしれません。本当かどうかはやったことが無いので知りません。ゴメンナサイ。 | ||