在c语言中,数据类型"int“的大小总是等于指针的大小吗?
我只是好奇。
发布于 2012-01-19 03:16:49
一点也不,不能保证sizeof(int) == sizeof(void*)。在Linux/AMD64上,sizeof(int)是4字节,sizeof(void*)是8字节(与该平台上的sizeof(long)相同)。
最近的C标准(例如C99)定义了一个标准的报头<stdint.h>,其中它应该定义一个整数类型的intptr_t,它被保证具有指针的大小(甚至可能是可逆地转换到和来自指针的)。
我认为该标准并不能保证所有的指针都具有相同的大小,特别是指向函数的指针可以比数据指针“更大”(我不能说出哪个平台是真的)。我相信最新的Posix标准要求这样(例如,对于dlsym(3))。
另请参阅this C reference和n1570草案C11标准(或更好)
PS。在2021年,我不能命名一个与sizeof(long) != sizeof(void*)通用的平台。但在上个世纪,旧的intel 286可能就是这样一个平台。
发布于 2012-01-19 03:17:02
不是的。例如,在大多数64位系统中,int是4字节,void*是8。
发布于 2012-01-19 03:17:34
这是不能保证的。
例如,在大多数64位系统中,这两种大小通常是不同的。
即使是sizeof (int *)也无法保证等同于sizeof (void *)。
void *大小的唯一保证是
sizeof (void *) == sizeof (char *)
== sizeof (signed char *) == sizeof (unsigned char *)https://stackoverflow.com/questions/8915918
复制相似问题