由于虚拟化,我知道指向函数的指针是 8 字节,但为什么指向函数指针的指针是 8 字节?
typedef void(*fun())();
sizeof(fun*); // returns 8 byte
如果你有一个 8 位字节的 64 位系统(听起来像你这样做),那么所有指针的大小可能都是 8 字节。虚拟化与它没有任何关系。
这是因为无论它们指向什么类型的数据,它们都是指向内存地址的指针,并且您在 64 位系统上运行
如果说内存地址... 4 个字节,那么您的计算机上不可能有超过 4GB 的内存。只是没有足够的不同指针值。
pointer to a pointer to a function is 8 byte?
它也是一个指针。
char *, int *, float * and etc
所有这些指针都具有相同的大小和函数指针。
指针的大小取决于架构。
在大多数架构上指针大小相同在您的情况下为 8 字节(64 位)
32 位大小为 4 字节,
根据@Grijesh Chauhan 评论添加此内容。
你有一个 64 位机器,它有一个 64 位地址字,恰好是 8 个字节。指针只是一个内存地址,因为地址空间中有多少位,所以它是 8 个字节。
如果您运行的是 32 位操作系统,它将是 4 个字节,或者在 286+DOS 上是 2 个字节。