アフィリエイト広告を利用しています

広告

posted by fanblog

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();
}
// ------------------------------------

e03_0004.png


 関数へのポインタの配列

 次の、三つの関数があるとします。

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';
}
// ------------------------------------

e03_0005.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:13時点)

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:14時点)





この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6989979
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。