在设计新的编程语言时,可以安全地假设C int和指针在机器上的大小相同吗?
答案 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。它们保证至少与指针大小相同:)