sizeof(int)是否始终等于sizeof(void*)
Is sizeof(int) always equal to sizeof(void*)
可能重复:
sizeof(int)==sizeof(void*)?
我想知道是否可以保证,在32位和64位系统中,sizeof(int)
总是等于sizeof(void*)
(即分别为32和64位)。
此外,我需要知道是否总是保证long int
可以将int
和void*
的比特容纳在一起,例如
long int lint = (((int)integer)<<sizeof(int)) | (void*)ptr;
我想知道是否可以保证,在32位和64位系统中,
sizeof(int)
总是等于sizeof(void*)
没有。
我需要知道是否总是保证
long int
可以将int
和void*
的比特一起容纳
没有。一个快速的证明是考虑许多现代平台上的sizeof(long int) == sizeof(int)
,可能包括您正在使用的平台。
更重要的问题是为什么你认为你"需要知道"这一点;你问这样的问题让我担心你的代码可能是。。。摇摆不定。
int的大小取决于实现,尽管在许多系统中它可能等于指针的大小,但无法保证。
如果你决定你需要代码来依赖它,你可以包括一些东西,比如:
if (sizeof(int) != sizeof(void *))
{
fprintf(stderr, "ERROR: size assumptions are invalid; this program cannot continue.n");
exit(-1);
}
我想知道是否可以保证,在32位和64位系统中,sizeof(int)总是等于sizeof(void*)(即分别为32和64位)。
没有。
此外,我需要知道是否总是保证长int可以同时容纳int和void*的位
没有。
您要查找的是:std::intptr_t
sizeof(std::intptr_t) == sizeof(void*)
std::intptr_t被定义为一个大小足以容纳指针的整数。
从技术上讲,它是标准的可选部分
但您通常可以在头文件<cstdint>
中找到请参阅:18.4.1 Header <cstdint> synopsis [cstdint.syn]
最近的C99标准提供了一个<stdint.h>
标头,定义了一个保证与指针大小相同的intptr_t
积分类型。
在我的Debian/AMD64/Sid上,sizeof(int)
是4个字节,但sizeof(void*)
、sizeof(intptr_t)
和sizeof(long)
都是8个字节。
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 我应该使用什么来代替void作为变体中的替代类型之一
- 奇怪的结构&GCC&clang(void*返回类型)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 引用一个已擦除类型(void*)的指针
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- x = malloc(n * sizeof (int));无法将 void 转换为 int
- 为什么 vtables 有 sizeof(void*) * 2 字节的0x00填充?
- 是 t min(t, t);总是比 const T&Min(const T&, const T&);如果 sizeof(T) <= sizeof(void*)?
- 编译 SkyFireEMU 错误,sizeof(void *) 两者都不是
- 为什么(void)sizeof(param)不"使用"参数?
- sizeof(int)是否始终等于sizeof(void*)
- sizeof(void()) 是一个合法的表达吗?