可以安全地假设sizeof(double)始终大于或等于sizeof(void*)吗
在某些情况下,下面的代码是可移植的吗?
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),我可以看到这将是一个可怕的错误。
发布于 2012-07-03 21:32:18
在目前的系统上是这样的。double在所有当前和未来的系统上都是64位的,因为它们与IEEE算法的双精度对齐。指针在未来可能会变得更大,这是不太可能的-可能不是为了更大的地址空间,而是为了携带它们的绑定信息。
在任何情况下,依赖于double和void *之间的任何关系似乎都不是一个好主意……
发布于 2012-07-03 19:30:48
大小与此无关。总会有一些位存储在其中,大小总是足够大,可以容纳一个void*。错误的地方是你将一个几乎随机的位模式解释为一个指针,这只会导致崩溃,但很可能你已经知道了这一点。不要这样做。
https://stackoverflow.com/questions/11309273
复制相似问题