sizeof void指针

为什么sizeof void指针2

void*的大小是与平台相关的值。 通常,对于32位和64位平台,它的值分别为4或8。 如果你得到2作为值,那么你可能在16位编码平台上运行(或者可能有编码错误)。

您可以发布您正在使用的代码以及有关您的环境/操作系统的更多信息吗?

根据在线C标准(n1256草案) :

6.2.5类型

27 指向void的指针应具有与指向字符类型的指针相同的表示和对齐要求。 39)类似地,指向兼容类型的合格或非限定版本的指针应具有相同的表示和对齐要求。 所有指向结构类型的指针都应具有相同的表示和对齐要求。 所有指向union类型的指针都应具有相同的表示和对齐要求。 指向其他类型的指针不需要具有相同的表示或对齐要求。

至于为什么void和char指针在你的系统上的大小为2,我怀疑那是因为你是在一个16位平台上。

指针存储指向其他内容的内存地址。 指针的大小取决于您的平台。 在32位平台上,您需要32位或4个字节来存储内存地址,因此任何指针的大小都将返回4。

如果sizeof(void *)为2,那么您可能正在16位平台上运行。

正如JaredPar已经指出的那样,这取决于平台。 换句话说:用过的CPU用于内存寻址的位数是多少? 对于16位地址,您将获得2个字节的大小。 你在为16位微控制器编译代码吗?

指针的大小等于整数的大小。 它可以是16位编译器中的2个字节,32位编译器中的4个字节和64位编译器中的8个字节。

void *ptrint *ptrchar *ptr会给你相同的大小但如果你做了ptr++ ,相应的指针将根据数据类型跳转。 即voidchar情况下的1个位置。 在int情况下类似地有4个位置。