![]() |
![]() |
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. |