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

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

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


#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


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


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

作者を応援しよう!

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

応援したユーザー

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