関数ポインタ変数の配列をつかって複数の自作関数を実行することのメリットは自作関数が実行される順序を入れ替えることができることにあります

関数ポインタ変数の配列をつかって複数の自作関数を実行してみよう

ソーラー「次は関数ポインタ変数の配列を作ってみよう」


#include <stdio.h>


void newmadefunction1(void) {


printf("青い海です\n");


return;

}


void newmadefunction2(void) {


printf("金色の海です\n");


return;

}


void newmadefunction3(void) {


printf("水色の海です\n");


return;

}


int main(void) {


void(*ptf[3])(void);


ptf [0]= newmadefunction1;

ptf [1]= newmadefunction2;

ptf [2]= newmadefunction3;


(*ptf[0])();

(*ptf[1])();

(*ptf[2])();


return 0;


}


コンパイル結果(EAZY IDECの場合)


青い海です

金色の海です

水色の海です



ソーラー「このプログラムでは


関数ポインタ変数宣言


void(*ptf[3])(void);


により


関数ポインタ変数が


ptf[0]

ptf[1]

ptf[2]


と3つ生成されるんだよ


まとめて

関数ポインタ変数を作製したいときには


この方法は便利だよね。


関数ポインタ変数名を


ptf1

ptf2

ptf3

のように

3つ考えて

関数ポインタ変数宣言を3つ


void(*ptf1)(void);

void(*ptf2)(void);

void(*ptf3)(void);


と記述しなくてもいいからね。


後は自作関数名


newmadefunction1

newmadefunction2

newmadefunction3


作製された

関数ポインタ変数

ptf[0]

ptf[1]

ptf[2]

ptf[0]= newmadefunction1;

ptf[1]= newmadefunction2;

ptf[2]= newmadefunction3;


と代入すれば


*ptf[0]

*ptf[1]

*ptf[2]

コンパイル後

機械語に翻訳された自作関数が格納されているメモリにアクセスして


自作関数

newmadefunction1

newmadefunction2

newmadefunction3


の働きをすることになります。


ですので


(*ptf[0])();

(*ptf[1])();

(*ptf[2])();


と記述して


コンパイル結果に


青い海です

金色の海です

水色の海です


が表示できるってわけだね。


つまり


自作関数

newmadefunction1

newmadefunction2

newmadefunction3


を実行できるってわけだね。」


  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る