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

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

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

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

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

不,尤其是在64位环境中:

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

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

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

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

如果你需要一个大小合适的整数来保存指针,请使用#include (或 )和uintptr_t – 假设你有C99支持,或者可以模拟它。

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