1

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));

私がテストしたいくつかのマシンでは動作sizeof(void*) > sizeof(double)しますが、 .

4

2 に答える 2

3

現在のシステムではそうです。IEEE演算の倍精度に対応しているため、現在および将来のすべてのdoubleシステムで64ビットです。ポインタが将来大きくなる可能性は低いですが、確かに可能です。おそらく、アドレススペースを大きくするためではなく、境界情報を運ぶためです。

doubleいずれにせよ、との間の関係に依存することは本当に悪い考えのようvoid *です...

于 2012-07-03T13:32:18.357 に答える
1

サイズはそれとは何の関係もありません。そこには常にいくつかのビットが格納され、サイズは常にvoid*. うまくいかないのは、ほとんどランダムなビット パターンをポインターとして解釈することです。これは、クラッシュ以外のことはできませんが、ほとんどの場合、既にそれを知っているでしょう。やらないでください。

于 2012-07-03T11:30:48.010 に答える