标准并未详细说明指针的大小和对齐方式,因此它们不受语言的严格限制。将一个有效的函数指针转换为另一个函数指针再转换回来可以保证生成原始值。因此,必须有相同的最小可表示值数量,即任何给定函数指针类型的最大有效地址数,这给出了所有函数指针类型的大小下限。对象类型之间的转换也有类似的保证,但仅适用于原始指向类型具有更严格或相等的对齐要求的情况。因此,指向高度对齐类型的对象指针需要较少的可表示值。如果对齐足够高,则该类型理论上可能更小。在允许指向void和指向函数之间进行转换的系统上(这是有条件支持的),指向函数和指向void的可表示值的最小数量必须相同。但即便如此,一些指针类型可能比其所需的可表示值数量更大。这些额外的位将被强制未使用。这并不是非常实用。
T*
。只有对象指针和函数指针才是指针类型。 - eerorikasizeof
,没有提到alignof
。即使对于sizeof
,它似乎也不是一个完整的答案。所选答案是“是的”,它们都等于sizeof(void*)
,但没有解释或参考资料。还有另一个答案说“不是”(根据标准),但它没有说有分类,这就是你之前说的内容。 - Koosha