c - 解密 (*(void(*)())0)()

标签 c syntax function-pointers

他们说这个表达式在 C 中是有效的,它意味着调用一个函数:

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

有人能清楚地解释一下这个表达式的意思吗?

我试着编译它,很惊讶它没有导致错误。

最佳答案

一步一步:

   void(*)()        // a pointer-to-function type, taking unspecified parameters
                    // and returning nothing.
  (void(*)())0      // a null pointer of that pointer-to-function type
(*(void(*)())0)     // dereference that pointer
(*(void(*)())0)();  // and call it with no parameters

代码有未定义的行为,它可能会因某种非法访问/段错误而崩溃。

关于c - 解密 (*(void(*)())0)(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604428/

相关文章:

c - 循环 (char *c, ...)

c++ - 扩展精度浮点库 C/C++

c - 如何将 Unicode 转义字符转换为 utf8?

javascript - 语法突出显示 js 文件以匹配方法之间的句点

sql - 如何比较表中最后一个和倒数第二个条目的值?

c - 在 C 中,为什么我可以将函数名(不是指针)作为参数传递给函数?

c++ - C++ vtables中的双重间接

C: conio 颜色转十六进制代码/RGB

go - 语法错误 : unexpected celsfah, 期待 (

c++ - lambda 转换为 bool 而不是推导函数指针类型