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

Why does sizeof (void(*)(void)) print 8?

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

printf("sizeof(void(*)(void))  = %zu\n", sizeof(void(*)(void)));

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

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

因此,攻击您的列表:

  1. 这是一个函数指针。
  2. 它没有 "do" 任何东西,它是一种类型。它可以用来保存一个函数的地址。
  3. 当你需要存储一个函数的地址时。
  4. 可能是因为您使用的是 64 位平台,其中指针为 8 个字节。