假设指针是C中int的大小是否安全?

时间:2011-01-01 15:56:34

标签: c pointers language-design

在设计新的编程语言时,可以安全地假设C int和指针在机器上的大小相同吗?

7 个答案:

答案 0 :(得分:16)

没有。指针可以大于或小于整数。如果由于某种原因需要将指针作为整数传递(如执行整数,而不是指针,算术),则可以保证它们适合intptr_t

它们不能保证符合另一个答案中建议的size_t,但实际上它们不太可能,因为最大的可寻址大小通常等于最大的可寻址地址。

答案 1 :(得分:5)

不,一点也不。许多编译器没有相同的大小。

答案 2 :(得分:3)

不,特别是在64位环境中:

LP64这涵盖了* nix环境,但在LLP64的窗口中也是如此。

答案 3 :(得分:1)

不,但指针的大小应与intptr_t相同。

答案 4 :(得分:1)

我认为你的意思是平台定义的数据类型的大小而不是C lang。据我所知,C没有为数据类型定义任何特定大小。你的问题的答案是你不能假设这一点,例如在win32 sizeof(int)== sizeof(指针)== 4字节但是在win64 sizeof(int)== 4和sizeof(指针)== 8 < / p>

答案 5 :(得分:1)

没有;在我的MacOS X 10.6.5上。机器,int是32位,默认情况下指针是64位。

如果您需要一个大小合适的整数来容纳指针,请使用#include <inttypes.h>(或<stdint.h>)和uintptr_t - 假设您有C99支持,或者可以模拟它。

答案 6 :(得分:-2)

我相信Linux内核将指针传递为unsigned long。它们保证至少与指针大小相同:)