シェアする

  • このエントリーをはてなブックマークに追加

C言語 ポインタが理解できない理由 – 関数ポインタ

シェアする

  • このエントリーをはてなブックマークに追加
  • 1

C言語 ポインタが理解できない理由 – 関数ポインタ

こんにちは、じゅんです。

C言語 ポインタが理解できない理由のマインドマップ

今日は『関数ポインタ』についてお話しします。

関数にも当然のことですがアドレスがある訳なので、『ポインタ』で表現できる訳ですね。

関数もポインタで表すことができるのです

『ポインタ』で悩むところは『構造体のポインタ』と今日取り上げる『関数ポインタ』ではないでしょうか?

要は関数も構造体も全てメモリの『どこか』に格納されているのだということが理解できればそんなに難しい話しではありません。

    1. プログラム
    2. メモリの使われ方
    3. 型とポインタ
    4. 配列とポインタ
    5. 文字列とポインタ
    6. mallocとポインタ
    7. 関数とポインタ
    8. 構造体とポインタ

まず『関数ポインタ』が使われる場面ですが

  • 割り込みハンドラ
  • callback()関数

等が挙げられます。

使い方はこんな感じです。

void funca(void)

{

  printf(“funca\n”);

  return;

}

void funcb(void)

{

  printf(“funcb\n”);

  return;

}

int main(void)

{

  void (*func[])(void) = {funca, funcb};

  func[0]();

  func[1]();

  return 0;

}

これを実行して頂くと分かりますが、最初の ”func[0]()” で “funca” が表示され、次の “func[1]()” で “funcb” が表示されます。

配列の0番目と1番目に ”funca” のアドレスと “funcb” のアドレスが入っていて、それを実行している訳ですね。

関数ポインタが使いこなせるようになると、ドライバを作るのもいけるのではないかと信じてこれからもポインタを使いこなせるよう私も頑張りたいと思います。

明日はこれまでのまとめをしたいと思います。