数据类型“ int”的大小是否总是等于c语言中的指针的大小?
我只是很好奇。
完全没有,不能保证sizeof(int) == sizeof(void*)
。在Linux / AMD64上,sizeof(int)
是4个字节,sizeof(void*)
是8个字节(与该平台上的sizeof(long)
相同)。
最近的C标准(例如C99)定义了标准标头<stdint.h>
,该标头除其他外应定义一个整数类型intptr_t
,该类型必须保证具有指针的大小(甚至可能可逆地与指针进行转换) )。
我认为该标准不能保证所有指针都具有相同的大小,特别是指向函数的指针可以比数据指针“更大”(我无法命名为真的平台)。我认为最新的Posix标准对此有要求(例如dlsym
)。
没有例如,在大多数64位系统中,int是4个字节,而void *是8。
不保证。
例如,在大多数64位系统中,两种大小通常是不同的。
即使sizeof (int *)
也不保证等于sizeof (void *)
。
void *
大小的唯一保证是
sizeof (void *) == sizeof (char *)
== sizeof (signed char *) == sizeof (unsigned char *)
没有一些代码(大多数是较旧的VAX时代)假定了这一点,但是绝对不是必需的,并且假定它不是可移植的。在实际的实现中,两者是不同的(例如,某些当前的64位环境使用64位指针和32位int)。
sizeof(long) == sizeof(void*)
。