関数ポインタ変数ptfに自作関数のアドレスを代入し*ptfをつかって自作関数を実行してみましょう その2

ソーラー「それでは


関数ポインタ変数宣言により作製された


関数ポインタ変数ptfに自作関数newmadefunctionの


アドレスを代入したのち


*ptf


を用いて


自作関数newmadefunctionを実行してみよ~う😊


その2となるね。


さきほどの


自作関数の定義は


int newmadefunction(int x) {


printf("%d円GETしました\n", x);


return 1;


}


だったけど


今度の自作関数の定義は


void newmadefunction(void) {


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


return ;


}


としてみよう。



さあ *ptfを用いて


この自作関数newmadefunctionが実行できるかな😊



それでは


*ptfを用いて自作関数newmadefunctionを実行する


次のプログラムをご覧ください。」



#include <stdio.h>



void newmadefunction(void) {


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


return;


}


int main(void) {


void(*ptf)(void);


ptf = newmadefunction;


(*ptf)();


return 0;


}

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


青い海です


ビルド結果(Visual Studioの場合)


青い海です


ソーラー「コンパイル結果に


青い海です


が表示されたね。


(*ptf)();


をもちいて


自作関数の定義の


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


を実行することができました。


この場合は


プログラムが実行されると


自作関数newmadefunctionは


機械語に翻訳されてメモリに格納されます。


その時の


機械語に翻訳された自作関数newmadefunctionを格納している


先頭のメモリのアドレスを


格納する関数ポインタ変数ptfが


関数ポインタ変数宣言


void(*ptf)(void);


により


作製されています。


*ptfが


機械語に翻訳された自作関数newmadefunctionが格納されているメモリに


アクセスして


自作関数newmadefunctionを


呼び出して実行することができるためには


やはり


さきほどのエピソードの時と同様に


関数ポインタ変数ptfに


自作関数newmadefunctionを格納している先頭のメモリのアドレスが


格納されてなければいけないんだね。


そうすることにより


*ptfは自作関数newmadefunctionを表すことになるんだ。


そこで


どのように


自作関数newmadefunctionを格納している先頭のメモリのアドレス



関数ポインタ変数ptfに代入するかなんだけど


このプログラムでも記述されているように


ptf = newmadefunction;



関数ポインタ変数に自作関数名newmadefunction


を代入すれば


自作関数newmadefunctionを格納している先頭のメモリのアドレス



関数ポインタ変数ptfに代入することができるんだよ。


これで


*ptfを用いて


自作関数newmadefunctionを格納しているメモリにアクセスして


自作関数newmadefunctionを呼び出して


使用することができるようになるんだ。


プログラムのなかの


(*ptf)();


を見てみてよ。(´▽`*)


(*ptf)();


が実行されて


コンパイル結果


青い海です


が表示されているんだよ。」



アレサ「ソーラーさん


(*ptf)(void);


でなく


(*ptf)();


と記述するのですね。」


ソーラー「自作関数の定義は


void newmadefunction(void) {


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


return;


}


となっているけど


*ptfをもちいて自作関数newmadefunctionを


呼び出して使用するには


(*ptf)(void);


でなく


(*ptf)();


と記述する仕組みになっているんだ。


(*ptf)(void);

と記述すると


コンパイルエラーになります。」



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

作者を応援しよう!

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

応援したユーザー

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