ためになるホームページ お問い合わせ




TOP > C言語 > 関数へのポインタ
関数のアドレス
関数もメモリ上に配置しているので、アドレスを表示する事ができる。関数名がそのまま、アドレスとなる。

関数のアドレスの表示の例
/*!
 ******************************************************************************
 * \brief 関数のアドレスの表示
 *
 ******************************************************************************
 */
#include <stdio.h>

void func(const char* str);
int main(int argc, char** argv)
{
  printf ("関数mainのアドレスは %pです。\n", main);
  printf ("関数funcのアドレスは %pです。\n", func);
  return(0);
}

void
func(const char* str)
{
  printf ("%s\n", str);
  return;
}


関数へのポインタ宣言
関数へのポインタ宣言は、以下のようにする。
(宣言方法) 戻り値の型 (*変数名) ();
※名前は任意の名前。また、引数は特に指定しなくてよい。
上記の宣言をする事により、宣言した名前はポインタとなるので、関数のアドレスを格納するには、以下のように
名前 = 関数名;
とする。

関数へのポインタ宣言の例
/*!
 ******************************************************************************
 * \brief 関数へのポインタ宣言
 *
 ******************************************************************************
 */
#include <stdio.h>

void func(const char* str);
int main(int argc, char** argv)
{
  void (*pfunc)();
  printf ("関数mainのアドレスは %pです。\n", main);
  printf ("関数funcのアドレスは %pです。\n", func);
  pfunc = func;
  printf ("関数funcのアドレスは %pです。\n", pfunc);
  return(0);
}
void
func(const char* str)
{
  printf ("%s\n", str);
  return;
}


関数へのポインタを使う
関数へのポインタを用いて、関数のように使うには以下のように使う。
(*ポインタ名)(引数...);

関数へのポインタを使う例
/*!
 ******************************************************************************
 * \brief 関数へのポインタを使う
 *
 ******************************************************************************
 */
#include <stdio.h>

void func(const char* str);
int main(int argc, char** argv)
{
  void (*pfunc)();
  func("普通に関数を呼びました");
  pfunc = func;

  (*pfunc)("関数へのポインタを使って呼びました");
  return(0);
}

void
func(const char* str)
{
  printf ("%s\n", str);
  return;
}

関数へのポインタ配列
(書式) 戻り値の型 (*変数名[要素])();
(*ポインタ名)(引数...);
ポインタを代入するときは、戻り値の型を合わせなければならない。

関数へのポインタ配列の例

/*!
 ******************************************************************************
 * \brief 関数へのポインタ配列
 *
 ******************************************************************************
 */
#include <stdio.h>

int plus(unsigned int a, unsigned int b);
int minus(unsigned int a, unsigned int b);

int main(int argc, char** argv)
{
  int (*pfunc[2])() = {plus, minus};
  printf ("3 + 5 = %d\n", (*pfunc[0])(3, 5));
  printf ("3 - 5 = %d\n", (*pfunc[1])(3, 5));
  return(0);
}


int plus(unsigned int a, unsigned int b)
{
  return((int)(a + b));
}

int minus(unsigned int a, unsigned int b)
{
  return((int)(a - b));
}







Copyright 2007 ためになるホームページ All Rights Reserved.