2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

備忘録 関数ポインタ,関数ポインタの配列(C言語)

Last updated at Posted at 2019-01-27

#関数ポインタって
関数のアドレスが入った変数のようなものです。
忘れないようにメモっておきます。

#関数ポインタの使い方
##宣言の方法

ex_01.c
int (*hoge)(int,int);

こんな感じに宣言できます。
関数型なども決めちゃいます。

##代入の方法

ex_02.c
int fuga(int x,int y){//関数の宣言
     //何らかの処理
     return z;
}

int main(){
    int x,y;
    int (*hoge)(int,int);
    hoge=fuga;//ポインタに関数fugaを代入
    return 0;
}

こんなかんじに代入できます。

##使い方

ex_02.c
int fuga(int x,int y){//関数の宣言
     //何らかの処理
     return z;
}

int main(){
    int s,t;
    int (*hoge)(int,int);
    hoge=fuga;
    //付け足したコード はじめ
    int ans=hoge(s,t);
    //おわり
    return 0;
}

int型変数ansを宣言してfuga(int,int) の戻り値を代入しています。

#関数ポインタの配列
関数ポインタは配列にすることができます。
##宣言

int (*fn_p[5])(int,int);

これでint型関数のアドレスが5つ入る配列ができました。

##代入

(*fn_p[5])(int,int)={sum,diff,pro,quo};
//関数は宣言したものとします。

関数名を入れることで代入することができます。

##使い方

(*fn_p[5])(int,int)={sum,diff,pro,quo};
//関数は宣言したものとします。

int ans=fn_p[0](5,3);
//関数sumを呼び出し(第一引数に5、第二引数に3)

このようにして呼び出します。

##活用法
「"関数ポインタの配列"なんて意味不明なもの何に使うんだ」
と思うかもしれませんが添字の数値で関数を呼び出すことができます。
これによりループ処理などに応用することが可能です。

2
4
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?