// ( t8.C ) // 関数へのポインタ:そのまま使う場合 // #include #include void err1( char* p ) { cout << "Error1 : " << p << "\n" ; } void (*PF1)( char* ) ; // PF1 と言うのは何でもよい、char* は型を合わせると // いうこと。 void err2( void ) { cout << "Error2 desu\n" ; } void (*PF2)( void ) ; int sub1( int i ) { cout << "kotae = " << i << "\n" ; return i*10 ; } int (*effect)( int ) ; void sub2( double (*func)(double),double x ) { cout << func(x) << endl ; } main() { PF1 = &err1 ; (*PF1)( "katou" ) ; // Error1 : katou 注.*PF1("katou") ではダメ! PF2 = &err2 ; (*PF2)() ; // Error2 desu effect = &sub1 ; int a ; a = (*effect)( 10 ) ; // Kotae = 100 cout << a << "\n" ; // 100 sub2( cos,1.0 ) ; // 0.540302 } /* [参考] < C++の場合 > 型をきちんと書かなければならない double (*func)(double) ; func = sin ; printf( "%f\n",(*func)(1.0) ) ; < C言語の場合 > double (*func)() ; func = sin ; printf( "%f\n",(*func)(1.0) ) ; void s1( int i ) { printf( "s1 = %d\n",i ) ; } void s2( char* s ) { printf( "s2 = %s\n",s ) ; } void main() { void (*func)(...) ; C++の場合、ここではこの表現はダメ。 func = s1 ; (*func)(1) ; C言語でも引数が2個以上になると警告がでる。 func = s2 ; (*func)("Katou") ; */