首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >假设sizeof(双倍) >= sizeof(void*)安全吗?

假设sizeof(双倍) >= sizeof(void*)安全吗?
EN

Stack Overflow用户
提问于 2012-07-03 18:45:22
回答 2查看 2.7K关注 0票数 1

可以安全地假设sizeof(double)始终大于或等于sizeof(void*)

在某些情况下,下面的代码是可移植的吗?

代码语言:javascript
复制
int x = 100;
double tmp;

union {
  double dbl;
  void* ptr;
} conv;

conv.ptr = (void*)&x;
tmp = conv.dbl;

conv.dbl = tmp;
printf("%d\n", *((int*)conv.ptr));

在我测试过它的几台机器上运行It does work,但如果使用sizeof(void*) > sizeof(double),我可以看到这将是一个可怕的错误。

EN

回答 2

Stack Overflow用户

发布于 2012-07-03 21:32:18

在目前的系统上是这样的。double在所有当前和未来的系统上都是64位的,因为它们与IEEE算法的双精度对齐。指针在未来可能会变得更大,这是不太可能的-可能不是为了更大的地址空间,而是为了携带它们的绑定信息。

在任何情况下,依赖于doublevoid *之间的任何关系似乎都不是一个好主意……

票数 3
EN

Stack Overflow用户

发布于 2012-07-03 19:30:48

大小与此无关。总会有一些位存储在其中,大小总是足够大,可以容纳一个void*。错误的地方是你将一个几乎随机的位模式解释为一个指针,这只会导致崩溃,但很可能你已经知道了这一点。不要这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11309273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档