int (*p[])()ってなんだ?

K&R本 5.12

複雑な宣言で出てきたこれ

int (*p[])();

所見なんだこりゃってなったけど少し考えてわかった。

これはつまり関数ポインタの配列ってことね。関数プロトタイプを宣言してないので一瞬なんだろうと迷ってしまった。

これは多分正しく書くなら

int (*p[])(void);

だと思う。いや、もしかしたら意図的にプロトタイプチェックをさせたくないのかもしれないけど多分違うだろう。

一応確認もしてみた。

#include <stdio.h>

int foo(void) {
    printf("foo\n");
    return 0;
}

int bar(void) {
    printf("bar\n");
    return 0;
}

int main (void) {
    int (*p[])() = { foo, bar };
    int i;
    
    for(i=0;i<2;i++){
        (p[i])();
    }
}
$ main
foo
bar

あってますね。