为什么这里的括号不可以去掉呢,不都是定义函数指针吗

int (*p)(int x, int y); //注意:这里的括号不能掉

为什么这里的括号不可以去掉呢,不都是定义函数指针吗

去掉括号变成这样:
int p(int x, int y);
等价于:
int
p(int x, int y);
于是这里就变成了一个返回值为一个指向int的指针了

百度。。。

img

这里去掉的话,返回值 int 和 * 会结合

【以下回答由 GPT 生成】

括号在这里是必需的,因为它们确保了指针 p 是一个函数指针,而不是一个返回类型为 int 的函数。这是因为在 C 语言中,如果省略了括号,那么解析器会先把 p 看作一个函数,然后再把 int 和 (int x, int y) 解析为函数的参数。结果是指针 p 被错误地解析为一个函数指针。

以下是一个例子来解释这个问题:

int a;             // 定义一个整型变量
int *b;            // 定义一个指向整型的指针变量
int (*c)(int x);   // 定义一个函数指针变量,接受一个整型参数并返回一个整型值

在上面的例子中,我们可以看到括号的作用。括号确保了指针变量 c 是一个函数指针,而不是一个返回类型为 int* 的函数。

如果我们省略括号:

int *p(int x);   // 这里的括号就是一个函数声明,不是定义函数指针

这将被解释器看作一个返回类型为 int* 的函数声明,而不是一个函数指针的定义。

所以,为了确保我们定义的是一个函数指针,而不是一个函数声明,我们需要在指针名称前面使用括号来明确指针的类型。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^