【发布时间】:2018-12-24 20:36:03
【问题描述】:
谁能准确解释一下这种类型在 C 语言中的 int * (*) (int *) 是什么意思?
谢谢,
【问题讨论】:
标签: c pointers function-pointers
谁能准确解释一下这种类型在 C 语言中的 int * (*) (int *) 是什么意思?
谢谢,
【问题讨论】:
标签: c pointers function-pointers
除非int 被定义为宏,否则int * (*) (int *) 既不包含任何常量也不包含任何标识符,因此它不能是表达式。相反,它是一个类型。具体来说,它是一个指向函数的指针类型,它接受一个int * 类型的参数,并返回一个int * 类型的值。例如,它与指向该函数的指针兼容:
int *foo(int *x) {
return x + 1;
}
您可以在类型转换表达式中使用它,例如在这个人为的示例中:
int *(*p)() = foo;
int *(*p2)(int *) = (int * (*)(int *)) p;
// here ------------^^^^^^^^^^^^^^^^^^
【讨论】:
这个
int * (*) (int *); /* not valid expression */
不是C 中的有效语法。你可能想知道
int * (*func) (int *); /* valid : function pointer declaration */
其中func是一个函数指针,可以指向一个函数,该函数接受int*类型的输入参数并返回int*。
【讨论】:
func,你就剩下它的类型:一个指向函数的指针,它的签名就是你所描述的。
vector 指向具有该签名的函数的指针。如std::vector<int * (*) (int *)> myfuncs;
您必须阅读有关阅读 C 声明的“左右”规则。 这是提供说明的链接。而不是给出答案,这将帮助您学习自己练习的东西。 http://cseweb.ucsd.edu/~ricko/rt_lt.rule.html
【讨论】: