関数ポインタ変数の配列をつかって複数の自作関数を実行することのメリットは自作関数が実行される順序を入れ替えることができることにあります
関数ポインタ変数の配列をつかって複数の自作関数を実行してみよう
ソーラー「次は関数ポインタ変数の配列を作ってみよう」
#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
を実行できるってわけだね。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます