是否保证sizeof(int)等于sizeof(void *)

问题描述 投票:4回答:8

数据类型“ int”的大小是否总是等于c语言中的指针的大小?

我只是很好奇。

c sizeof
8个回答
9
投票

完全没有,不能保证sizeof(int) == sizeof(void*)。在Linux / AMD64上,sizeof(int)是4个字节,sizeof(void*)是8个字节(与该平台上的sizeof(long)相同)。

最近的C标准(例如C99)定义了标准标头<stdint.h>,该标头除其他外应定义一个整数类型intptr_t,该类型必须保证具有指针的大小(甚至可能可逆地与指针进行转换) )。

我认为该标准不能保证所有指针都具有相同的大小,特别是指向函数的指针可以比数据指针“更大”(我无法命名为真的平台)。我认为最新的Posix标准对此有要求(例如dlsym)。


2
投票

没有例如,在大多数64位系统中,int是4个字节,而void *是8。


2
投票

不保证。

例如,在大多数64位系统中,两种大小通常是不同的。

即使sizeof (int *)也不保证等于sizeof (void *)

void *大小的唯一保证是

sizeof (void *) == sizeof (char *)
   == sizeof (signed char *) == sizeof (unsigned char *)

1
投票

没有一些代码(大多数是较旧的VAX时代)假定了这一点,但是绝对不是必需的,并且假定它不是可移植的。在实际的实现中,两者是不同的(例如,某些当前的64位环境使用64位指针和32位int)。


1
投票
对于整数或指针大小,C语言不提供任何保证。

1
投票
不能保证这两种类型的大小之间有任何关系,也不能通过双向转换在另一种类型中忠实地表示两者。这都是实现定义的。

1
投票
没有指针类型不必与整数类型具有相同的大小或表示形式。以下是C语言标准的一些相关部分(在线草稿here):

0
投票
不是,不是必须的,但通常是sizeof(long) == sizeof(void*)
© www.soinside.com 2019 - 2024. All rights reserved.