0

オブジェクトがあるとします:

void *tmpValue;

tmpValue が double を指していることを知っているとします。これを double にキャストする方法は次のとおりです。

double* dblPtr = (double*) tmpValue;
double dbl = *dblPtr;

しかし、void* から double への直接キャストが機能しないのはなぜでしょうか?

double dbl = (double) tmpValue; //error: "cannot convert from 'void*' to 'double'

前もって感謝します。

4

4 に答える 4

6

ポインタ (メモリ アドレス) を浮動小数点値として解釈することは賢明な操作ではありません。また、 と が同じサイズではないためvoid *、おそらくプラットフォームでは失敗します。double

やりたいことは、2 番目のコード スニペットのように、ポインターを解釈し、そのポインターdouble *を逆参照することです。double *

これは 1 行で実行できます。

double dbl = *(double *)tmpValue;

でも、これは C++ です。したほうがいい

double dbl = *static_cast<double *>(tmpValue);
于 2013-01-30T21:33:09.250 に答える
1

ポインター型から double にキャストすることはできません。ポインター型は基本的にメモリ アドレス (通常、メモリ上のデータの位置情報を含む 4 バイト) であることを思い出してください。したがって、ポインター型を整数にキャストできますが、double にキャストしても意味がありません。

void* ポインターを double* ポインター型にキャストすると、基本的に、「これは void* のアドレスではなく、double のアドレスになった」と言っています。

それでも1つのライナーで値を2倍にしたい場合は、次のことができます

double dbl = *( (double*) tmpValue );
于 2013-01-30T21:34:18.143 に答える
-1
double dbl = *(double*)tmpValue
于 2013-01-30T21:35:28.057 に答える
-2

ポインタを逆参照して ist 値をキャストする

于 2013-01-30T21:33:17.583 に答える