[英]C array of function pointers
我有以下我不完全理解的代码:
void (*foo[ABC]) (int *i) {
[A] = function1,
[B] = function2,
[C] = function3
}
其中A
, B
和C
是整数常量。
1-如果以前没有定义ABC
它是有效的声明吗?
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
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.