関数を格納している先頭のメモリのアドレスを関数のポインタ変数ptfに代入すれば*ptf は関数をあらわすことになり*ptfを用いて関数を呼び出して使用することができるようになります。

関数を格納している先頭のメモリのアドレスを関数のポインタ変数ptfに代入すれば*ptf は関数をあらわすことになり*ptfを用いて関数を呼び出して使用することができるようになります。

ソーラー「さあ 今日もはりきっていこう😊


調子はどうかな?」


アレサ「そうしましょう😊」



ソーラー「


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


#include <stdio.h>


void newmadefunction(void){


printf("とてもきれいな青い海です\n");


return ;


}


int main (void){


newmadefunction();


return 0;


}


コンパイル結果


とてもきれいな青い海です


このプログラムでは


自作関数の定義


void newmadefunction(void){


printf("とてもきれいな青い海です\n");


return ;


}


が行われています。


このプログラムは


コンパイルされると


機械語に変換されて実行されます。


ところで


機械語は0と1のデータのあつまりでした


機械語に変換されたプログラムは


実行される前に


すべて 1度



   🍓🍓🍓 メモリに格納されます 🍓🍓🍓




そうしてから



CPUはそれらの命令をレジスタに格納して実行していくのでした。



となると



自作関数


void newmadefunction(void){


printf("とてもきれいな青い海です\n");


return ;


}



      🍓🍓🍓コンパイル後🍓🍓🍓 



機械語に翻訳されて


メモリに格納されていることになります


つまり


自作関数newmadefunctionを格納しているメモリがあるというわけです。


ある範囲のメモリにわたって


自作関数newmadefunctionを機械語に翻訳した0と1のデータの集まりが


格納されていることになるのですが


もちろん


0と1のデータの集まりを

格納している先頭のメモリというものがあります


関数ポインタ変数は


その


0と1の機械語データの集まりに変換された自作関数を


格納している先頭のメモリのアドレスを格納することができます。


変数aのアドレスをポインタ変数ptaに


pta=&aと代入すれば


*pta



変数a


と等しい働きを持ちましたね。


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


を格納する


関数ポインタ変数の名前をptfに設定します。


(関数ポインタ変数名は 自由に設定することができます)


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


関数のポインタ変数ptfに代入すれば


*ptf



自作関数newmadefunction


をあらわしていることになり


*ptf


を用いて


自作関数newmadefunctionを


呼び出して使用することができるようになります。


*pta



変数a


を表すことになったように


*ptf



自作関数newmadefunctin


を表すことになるわけです。



関数ポインタ変数の概要は


こんな感じかな😊」



アレサ「ところでマックスさん どこにいかれたのでしょうか?


ソーラーさん お知りになられていませんか?」


ソーラー「・・・(´▽`*)もう、最高さ」













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

作者を応援しよう!

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

応援したユーザー

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