我有以下一段我不完全理解的代码:
void (*foo[ABC]) (int *i) {
[A] = function1,
[B] = function2,
[C] = function3
}
其中A
和是整数常量B
。C
ABC
1-如果之前没有定义,它是一个有效的声明吗?
2-这种初始化方式叫什么?( [A] = function1;
)
3- 的价值是foo[D]
多少?它是一个空指针吗?
我有以下一段我不完全理解的代码:
void (*foo[ABC]) (int *i) {
[A] = function1,
[B] = function2,
[C] = function3
}
其中A
和是整数常量B
。C
ABC
1-如果之前没有定义,它是一个有效的声明吗?
2-这种初始化方式叫什么?( [A] = function1;
)
3- 的价值是foo[D]
多少?它是一个空指针吗?
“我不认为它是 C”不等同于“它不是 C”。
感谢您的链接,@Kninnug - 这是一个可怕的C99 功能(以及 C90 的 GNU 扩展),并且代码有一个错误:它是三个函数指针数组的拼写错误初始化。我可以想象这样的固定代码:
#define ABC 3
#define A 0
#define B 1
#define C 2
void function1(int *i)
{
}
void function2(int *i)
{
}
void function3(int *i)
{
}
int main(int argc, char *argv[])
{
void (*foo[ABC]) (int *i) = {
[A] = function1,
[B] = function2,
[C] = function3
};
return 0;
}
这编译.
还:
的价值是
foo[D]
多少?它是一个空指针吗?
嗯,是什么D
?如果D >= ABC
(假设它们都是非负整数),那么该元素甚至不存在。如果D < ABC
,那么它是一个NULL
指针,因为聚合(结构、联合和数组)初始化隐式零初始化初始化列表中没有相应初始化表达式的元素。
(更准确地说,它们被初始化“就好像它们具有static
存储持续时间一样”,NULL
在指针的情况下这是初始化。)