gpt4 book ai didi

c - C 表达式 ((void(*)(void))0)(); 是什么意思?意思?

转载 作者:太空狗 更新时间:2023-10-29 16:25:30 27 4
gpt4 key购买 nike

((void(*)(void))0)();

所以我们将整数 0 类型转换为这个棘手的类型 (void(*))(void) 然后执行它。消息来源声称这应该有效,但实际上是什么?

我想这一定是像 #define TRUE FALSE 这样的 C 笑话之一。

最佳答案

这是一个不需要参数且不返回任何值的函数:

void f(void)

这是一个指向不需要参数且不返回值的函数的指针:

void (*p)(void)

这是该指针的类型:

void (*)(void) /* just remove the p! */

这是括号中的类型:

(void (*)(void))

这是对该类型的转换(括号中的类型,后跟值):

(void (*)(void))0

还在我身边吗?到目前为止,我们已经将整数值 0 转换为一个指向函数的指针,该函数不接受任何参数并且不返回任何内容。

强制转换是一个指向函数类型的表达式。当您拥有其中之一时,您可以这样调用它:

(your expression here)(arguments to the function)

第一组括号只是为了优先考虑,有时可能不需要(但这次是)。最终结果:

((void (*)(void))0)(/* no args */);

取值 0,将其转换为指向无参数且无返回函数的指针,并调用它,不提供任何参数。

关于c - C 表达式 ((void(*)(void))0)(); 是什么意思?意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20357106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com