int (*p)(int x, int y); //注意:这里的括号不能掉
为什么这里的括号不可以去掉呢,不都是定义函数指针吗
去掉括号变成这样:
int p(int x, int y);
等价于:
int p(int x, int y);
于是这里就变成了一个返回值为一个指向int的指针了
百度。。。
这里去掉的话,返回值 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* 的函数声明,而不是一个函数指针的定义。
所以,为了确保我们定义的是一个函数指针,而不是一个函数声明,我们需要在指针名称前面使用括号来明确指针的类型。
【相关推荐】