(*(void(*)())0)();这句C语言怎么理解

这句C语言怎么理解,高手指点下。

将0转换为一个指向参数列表为空,返回值类型为void的函数指针值(函数地址),并对这个指针值解引用(通过这个函数地址调用这个函数):

(void(*)())0
这一部分是对0进行显式类型转换,转换为上述的函数指针。

*(void(*)())0
加上外面的这个星号,就是对指针的解引用.

(*(void(*)())0)()
再加上后面的一对空括号,就是通过这个函数指针对这个地址(0)的函数进行调用,只不过 ,这个调用是非法的,0地址是不可以这样转换并且解引用调用的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-16
这应该是一个函数指针的数组,数组名为a,数组的内容为函数指针,函数的参数为int,数组初始化为空。
返回值为空。例如:
#include
void
print(int
a)
{
printf("%d\n",a);
}
void
out(int
b)
{
printf("%d\n",
b+1);
}
void
main()
{
void
(*a[])(int)={print,
out};
a[0](3);
a[1](5);
}
输出:
3
6
相似回答