忍者ブログ
ADMIN / ENTRY
カレンダー
11 2017/12 01
S M T W T F S
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
新刊カレンダー
ブログ内検索
プロフィール
HN:
Nina.A
性別:
男性
趣味:
麻雀、ラノベ、漫画
自己紹介:
MJ4や天鳳等でよく麻雀やってます。もし会ったらよろしくです。
ブログは単なるメモ帳となる予定。
C/C++勉強中の大学生雑記
<<  2017/12  >>
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
[11]  [10]  [9]  [8]  [7]  [6]  [5]  [4]  [3]  [2]  [1
2017/12/14  22:09:42
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2008/11/09  15:32:31

関数ポインタを使う必要が出てきた。OpenCVのcvSetMouseCallback関数とかで存在自体は知ってたけど、使うのは初めてなのでメモっておく。

参考:C++言語解説Extrernal Link

以下に簡単な関数ポインタのプログラム例を挙げておく。

#include <iostream>

void func1(void){
  std::cout << "func1\n";
}

void func2(void){
  std::cout << "func2\n";
}

int main(void){
  int i;

  void (*func)(void);
  while(1){
    std::cout << "1:func1 2:func2 0:quit\n";
    std::cin >> i;
    switch(i){
      case 1:
        func = &func1;
        break;
      case 2:
        func = func2;
        break;
      default:
        goto LOOP_EXIT;
    }
    func();
  }
  
LOOP_EXIT:
  return 0;
}

これを見ると分かるように関数ポインタの宣言は、

     void        (*   func   )(     void     );
【関数の戻り値】 (*【変数名】)(【関数の引数】);
という形になる。

関数アドレスの取得は、

&func1
&【関数名】
または単に、
func2
【関数名】
で取得可能。

関数ポインタを介した関数の実行は、

(*      func      )(        );
(*【関数ポインタ】)(【引数】);
で実行可能。また、普通の関数のように、
      func      (        );
【関数ポインタ】(【引数】);
としても実行できる。

PR
この記事にコメントする
お名前:
タイトル:
文字色:
メールアドレス:
URL:
コメント:
パスワード:   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Powerd by NINJAブログ / Designed by SUSH
Copyright © メモ帳ブログ All Rights Reserved.
忍者ブログ [PR]