上級 › error: invalid type argument of unary '*'(関数ポインタ呼び出しの優先順位) › パターン1
error: invalid type argument of unary '*'(関数ポインタ呼び出しの優先順位)
*fp(a, b)と書くと、関数呼び出し()の方が間接参照*より優先順位が高いため、fp(a, b)を先に呼び出してからその戻り値に*を適用しようとしてしまいます。
1 #include <stdio.h> 2 3 int add(int a, int b) { return a + b; } 4 5 int main(void) { 6 int (*fp)(int, int) = add; 7 int result = ___________; ^ 8 printf("%d\n", result); 9 return 0; 10 }
main.c:7:18: error: invalid type argument of unary '*' (have 'int')
空欄を埋めてコンパイル・実行を通す
()は*より優先順位が高いため、*fp(2, 3)はfp(2, 3)を先に呼び出そうとします。fpは変数(関数ポインタ)であって関数ではないため、呼び出せずエラーになります。(*fp)(2, 3)のように括弧でfpを間接参照してから呼び出す必要があります。
次の問題