【问题标题】:Why does sizeof (void(*)(void)) print 8? [closed]为什么 sizeof (void(*)(void)) 打印 8? [关闭]
【发布时间】:2017-11-07 10:34:39
【问题描述】:

我在here 上看到了以下奇怪的语法类型:

printf("sizeof(void(*)(void))  = %zu\n", sizeof(void(*)(void)));
  • void(*)(void)是什么意思?
  • 它有什么作用?
  • 我应该在何时何地使用它?
  • 为什么sizeof it 8?

【问题讨论】:

  • 它是一个指向函数的指针,它是 8,因为在您运行它的平台上,指针似乎有 8 个字节长。
  • 问题1:如果你不知道它是什么,你为什么要写代码?在以某种方式编译之前,它不是混合匹配,对吧?
  • 问题 2:它什么也没做。什么都不做,是你使用它们。
  • 问题 3:你的 C 书说了什么?
  • 未来使用:cdecl

标签: c syntax sizeof void


【解决方案1】:

因为在那个平台上函数指针是 8 个字节。

表达式void(*)(void) 是一个指向函数的指针,该函数不接受参数并且没有返回值,因此这就是您要求的类型。

所以,攻击你的列表:

  1. 这是一个函数指针。
  2. 它不“做”任何事情,它是一种类型。它可以用来保存函数的地址。
  3. 当您需要存储函数的地址时。
  4. 可能是因为您使用的是 64 位平台,其中指针为 8 个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2021-09-26
    • 1970-01-01
    • 2021-12-04
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多