为什么sizeof(void(*)(void))打印8?

时间:2017-11-07 10:34:40

标签: c syntax sizeof void

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

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

1 个答案:

答案 0 :(得分:9)

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

表达式void(*)(void)是一个指向函数的指针,该函数不带参数且没有返回值,因此它是您要求的大小的类型。

所以,攻击你的清单:

  1. 它是一个函数指针。
  2. 它没有"做"什么,它是一种类型。它可以用来保存函数的地址。
  3. 当您需要存储功能的地址时。
  4. 可能是因为您使用的是指针为8字节的64位平台。