●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++では、関数そのもののアドレス(場所)を変数として扱うことができます。 これを「関数ポインタ(Function Pointer)」と呼びます。

関数ポインタを使えば、関数を引数として渡す実行時に処理を切り替えるといった柔軟な設計が可能になります。

関数ポインタとは?

関数ポインタとは、「ある型と引数を持つ関数のアドレス」を保持する変数のことです。 関数名の前に * を付け、関数の「引数の型」と「戻り値の型」を指定して宣言します。

基本構文

// 戻り値: int、引数: int, int を受け取る関数ポインタ
int (*funcPtr)(int, int);

使用例:加算と減算

#include <iostream>
using namespace std;

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    int (*calc)(int, int);  // 関数ポインタの宣言

    calc = add;
    cout << "加算: " << calc(10, 5) << endl;  // → 15

    calc = subtract;
    cout << "減算: " << calc(10, 5) << endl;  // → 5

    return 0;
}

この例では、calc に関数 addsubtract のアドレスを代入し、実行時に処理を切り替えています。

関数ポインタを引数に渡す

void execute(int a, int b, int (*operation)(int, int)) {
    cout << "結果: " << operation(a, b) << endl;
}

int main() {
    execute(3, 7, add);      // → 結果: 10
    execute(3, 7, subtract); // → 結果: -4
}

このように、関数そのものを他の関数に渡すことができ、非常に柔軟な設計が可能になります。

関数ポインタの配列

int (*ops[2])(int, int) = { add, subtract };

int main() {
    for (int i = 0; i < 2; i++) {
        cout << ops[i](10, 4) << endl;
    }
}

複数の関数をひとつの配列にまとめて、インデックスで切り替えることもできます。

関数ポインタのメリット

  1. 処理の切り替えが簡単にできる
  2. 関数の再利用性が高まる
  3. イベント処理やコールバックなどに最適

注意点

  • 関数のシグネチャ(引数の数と型、戻り値)を正しく一致させる必要があります。
  • ポインタの扱いに慣れていないと混乱しやすいので、まずはシンプルな例から始めると良いです。

まとめ

C++の関数ポインタは、関数を動的に選択したり、引数として渡すことができる非常に便利な仕組みです。 特に、コールバックやイベント処理、実行時の条件分岐などで力を発揮します。

まずは基本的な書き方と使用例に慣れ、少しずつ応用にチャレンジしてみましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方