为什么sizeof
无效指针2
?
答案 0 :(得分:39)
void*
的大小是与平台相关的值。通常,对于32位和64位平台,它的值分别为4或8个字节。如果你得到2作为值,那么你可能在16位编码平台上运行(或者可能有编码错误)。
您可以发布您正在使用的代码以及有关您的环境/操作系统的更多信息吗?
答案 1 :(得分:5)
根据online C standard (n1256 draft):
6.2.5类型
...
27 指向void的指针应具有与指向字符类型的指针相同的表示和对齐要求。 39)同样,指向兼容类型的限定或非限定版本的指针应具有相同的表示和对齐要求。所有指向结构类型的指针都应具有相同的表示和对齐要求 彼此相同。所有指向联合类型的指针都应具有相同的表示形式 对齐要求彼此。指向其他类型的指针不必相同 表示或对齐要求。
至于为什么void和char指针在你的系统上的大小为2,我怀疑那是因为你在16位平台上。
答案 2 :(得分:1)
指针存储指向其他内容的内存地址。 指针的大小取决于您的平台。在32位平台上,您需要32位或4个字节来存储内存地址,因此任何指针的大小都将返回4.
如果sizeof(void *)为2,那么你可能在16位平台上运行。
答案 3 :(得分:0)
正如JaredPar已经指出的那样,这取决于平台。 换句话说:用过的CPU用于内存寻址的位数是多少?对于16位地址,您将获得2个字节的大小。你在为16位微控制器编译代码吗?
答案 4 :(得分:0)
指针的大小等于整数的大小。它可以是16位编译器中的2个字节,32位编译器中的4个字节和64位编译器中的8个字节。
void *ptr
,int *ptr
和char *ptr
会给你相同的大小,但如果你ptr++
,相应的指针会根据数据类型跳转。即void
和char
案件中的1个位置。同样在int
案例中有4个职位。