我在指针C
中找到了这个int f[](); /* this one is illegal */
和
int (* f [])(); /* this one legal. */
我真的想知道第二个用法是什么。
谢谢。答案 0 :(得分:2)
如果您使用初始化块,则第二个示例非常有效。对于example:
#include <stdio.h>
int x = 0;
int a() { return x++ + 1; }
int b() { return x++ + 2; }
int c() { return x++ + 3; }
int main()
{
int (* abc[])() = {&a, &b, &c};
int i = 0,
l = sizeof(abc)/sizeof(abc[0]);
for (; i < l; i++) {
printf("Give me a %d for %d!\n", (*abc[i])(), i);
}
return 0;
}
答案 1 :(得分:1)
我不确定第二个例子是否合法,因为函数数组的大小是未知的,但它应该是一个函数指针数组,这里有一个可能的用法示例,如果大小将是众所周知的:
int a()
{
return 0;
}
int main(int argc ,char** argv)
{
int (* f [1])();
f[0] = a;
}
答案 2 :(得分:1)
int f[]();
//这是非法的,因为你无法创建一系列功能。它在C
但第二是合法的
int (* f [])();
它说f是一个函数指针数组,返回int
并且获取未指定数量的参数
答案 3 :(得分:1)
int f[](); /* this one is illegal */
那是试图声明一系列函数,这是不可能的。
int (* f [])(); /* this one NOT legal, despite what the OP's post says. */
那是试图声明一个函数指针的数组,如果指定了数组大小,将完全合法(并且合理),例如:
int (* f [42])(); /* this one legal. */
编辑:类型int (* f [])()
可以用作函数参数类型,因为对于函数参数类型,数组到指针的转换会立即发生,这意味着我们不需要指定(可能是多维)数组的最内层数组的维度:
void some_func(int (* f [])()); /* This is also legal. */