2017年11月20日
《その144》 関数へのポインタの配列
関数へのポインタ
関数 func が次のように定義されているとします。
void func() {
cout << "func が呼ばれました。\n";
}
func は、仮引数無し・返却値無しの関数なので、この関数を指すポインタ fp は、
void (*fp)();
のように宣言できます。今、
void (*fp)() = func;
とすれば、ポインタ fp は関数 func を指すことになります。したがって、次の二つの関数呼出し式は同じはたらきをします。
func();
(*fp)();
また、関数呼び出し式 f(・・・) の左オペランド f は、関数名でも、関数へのポインタでもよいので、
fp();
とすることもできます。
// ------------------------------------
#include <iostream>
using namespace std;
void func() { cout << "func が呼ばれました。\n"; }
int main() {
void (*fp)() = func;
(*fp)();
fp();
}
// ------------------------------------
関数へのポインタの配列
次の、三つの関数があるとします。
void func1() { cout << "func1 が呼ばれました。\n"; }
void func2() { cout << "func2 が呼ばれました。\n"; }
void func3() { cout << "func3 が呼ばれました。\n"; }
これらの関数へのポインタは、全て、
void (*fp)();
の形で宣言できます。
このようなとき、関数へのポインタの配列を作ることができます。
上の三つの関数の場合なら、その宣言は、
void (*fp[])() = { func1, func2, func3 };
です。
これで、関数呼び出し式
func1();
func2();
func3();
を、
(*fp)[1]();
(*fp)[2]();
(*fp)[3]();
と記述できるようになりました。
// ------------------------------------
#include <iostream>
using namespace std;
void func1() { cout << "func1 が呼ばれました。\n"; }
void func2() { cout << "func2 が呼ばれました。\n"; }
void func3() { cout << "func3 が呼ばれました。\n"; }
void func4() { cout << "func4 が呼ばれました。\n"; }
void func5() { cout << "func5 が呼ばれました。\n"; }
int main() {
void (*func[])() = { func1, func2, func3, func4, func5 };
for (int i = 0; i < 5; i++)
func[i](); // (*func[i])(); としてもよい。
cout << '\n';
}
// ------------------------------------
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6989979
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック