関数ポインタ

久しぶりの更新.最近は文献読んだりマリカしたり,なんとも生産的でない.


今日,授業で関数ポインタの説明を聞いたので,衝動的に書いてみた.今までつかった事がなく,そもそも関数ポインタの定義そのものに違和感を感じざるを得ないんだけれど,これでれっきとしたC言語の構文なんだよなぁ,と思うと,C言語の世界の広さを感じます.

#include<stdio.h>

typedef int (*func)(int, int);

void caller(func f)
{
  printf("%d\n", f(3, 4));
  return;
}

int add(int i, int j)
{
  return i + j;
}

int mul(int i, int j)
{
  return i * j;
}

int main()
{
  func a = add;
  func m = mul;
  caller(a);
  caller(m);
  return 0;
}

=>
% ./a.out 
7
12

引数の型と返り値は同じだけれど,関数の名前が違うってのは,なんというかオーバーロードの逆なイメージがある.なんとも安易だなぁ.