Cで関数を受けるポインタを作成する。

gcc で動いたのでメモ。以下のコードは helloworld とターミナルに出力する。

#include <stdio.h>

void sub(void){ printf("hello"); }

void sub0(void){ printf("world"); }

int main(void){
  void (*a)(void)=sub;
  a();
  a=sub0;
  a();
  return 0;
}

[2010.10.24]次のコードも走ったのでメモ。void型ポインタでも関数ポインタにキャストができる。

#include <stdio.h>
int sub0 (int a) {
  printf("%dhello",a);
  return a+1;
}
int sub1 (int a, int b) {
  printf("%d%dworld",a,b);
  return a+b+1;
}
int main(void){
  void * a;
  a=sub0;
  ((int(*)(int))a)(1);
  a=sub1;
  ((int(*)(int,int))a)(2,3);
}