人生ずっと勉強。
ITを軸としたT型人間になりたい人のブログ。
09 | 2017/10 | 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

関数ポインタ
下のコードは動くんだけど、
reg_funcの定義の部分が何をどうしてんのかわかるようでよくわからん・・・。
明日解読する予定。
#include<stdio.h>

void test1( int i ){
printf( "%d\n", i+1 );
}
void test2( int j ){
printf( "%d\n", j );
}
void (*reg_func(int n, void (* f)(int d)))(int f){
printf( "n == %d\n", n );
(*f)( 10 );
return test2;
}
int main( void ){
void (*p)(int);
p = (*reg_func)( 100, test1 );
(*p)(100);
return 0;
}



【追記】
関数ポインタを返す関数の宣言の仕方がこういう記法らしい。
参考:C言語で、関数ポインタを返す関数の宣言方法

なので上記の
void (*hoge(int n, void (* f)(int d)))(int f)

の部分は、
「引数にint、返り値はvoidの関数」へのポインタを返す関数hogeを定義しますよ、
hogeは引数に「intと、引数にintをとる関数へのポインタ」をとりますよ、
ということなのね。

typedefしたほうが明らかにキレイだわ。

typedef void (*pointer_to_func_arg_is_int)(int);
pointer_to_func_arg_is_int hoge( int, pointer_to_func_arg_is_int );


スポンサーサイト


わたくし

いろいろリンク

カテゴリ

月別アーカイブ

最新記事

最新コメント

最新トラックバック

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。