我在 C 的指针中找到了这个
int f[](); /* this one is illegal */
和:
int (* f [])(); /* this one legal. */
我真的很想知道第二个的用途是什么。
谢谢你。
我在 C 的指针中找到了这个
int f[](); /* this one is illegal */
和:
int (* f [])(); /* this one legal. */
我真的很想知道第二个的用途是什么。
谢谢你。
如果您使用初始化块,则第二个示例非常有效。例如:_
#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;
}
我不确定第二个例子是否合法,因为函数数组的大小是未知的,但它应该是一个函数指针数组,如果大小是,这里是一个可能的用法示例已知:
int a()
{
return 0;
}
int main(int argc ,char** argv)
{
int (* f [1])();
f[0] = a;
}
int f[]();
// 这是非法的,因为你不能创建函数数组。在里面是违法的C
但第二个是合法的
int (* f [])();
它说 f 是一个函数指针数组,返回int
并接受未指定数量的参数
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 [])()
可以用作函数参数类型,因为对于函数参数类型,数组到指针的转换会立即发生,这意味着我们不需要指定 a 的最内层数组的维度(可能是多维的)大批:
void some_func(int (* f [])()); /* This is also legal. */