読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

Cとかの関数へのポインタ

C言語

関数へのポインタ...こんなものがあったとは。全然知らなかったorz
まあBoostとかしてて時々関数名を引数に渡してどうやって呼び出してるんだろうとか思ってたけどこれがそうなのかな。

例えば次のような書きかたができるようだ

#include<stdio.h>

void hoge(char* a){
     printf("hello %s\n",a);
}

int main(){
     void (*p)(char* a) = hoge; //別に (*p)とか(char* a)とかの変数名は適当でおk。
     (*p)("opamp");  // ここで呼び出されて hello opamp と表示される
}

なんかすごいことになってるのでどうなってるのかはわからない。 引数を取る場合は

#include<stdio.h>

int hoge(int a){
     return a * a;
}

int main(){
     int (*p)(int a) = hoge;

     printf(" = %d\n",(*p)(10)); // = 100
}

2つ以上引数を取るときは

#include<stdio.h>

int hoge(int a,int b){
     return a * b;
}

int main(){
     int (*p)(int a,int b) = hoge;

     printf(" = %d\n",(*p)(10,100)); // = 1000
}

自分の理解を超えているが大体定形としての書き方がわかったきがする。

void hoge(void (*p)(int a),int n){
      (*p)(n);
}

とかもできるようだ。

とりあえず自分は理解できないときはもうこういうものなんだと納得することにしている・・・w

Firefox ブラウザ無料ダウンロード