2016-09-20 12 views
0
double d = 43.56; 
int m = d; 
cout<<(char *)&m<<endl; //works fine, it prints: + = 43 
cout<<(char *)m<<endl; //this doesn't work, char can't be made into a pointer 
cout<<reinterpret_cast<char *>(&m)<<endl; //works fine, prints: + 
cout<<static_cast<char *>(&m)<<endl; //Does not work 

私の質問は、コードの最後の行がなぜ機能しないのですか?型キャスト時のエラー。混乱

コンパイラエラーメッセージ:文字を入力するint型から無効にstatic_cast * *

はこれを変換することができをstatic_castはないでしょうか?

ありがとうございます。

+0

文字列として '43'を印刷すると思いますか? – LogicStuff

+0

わかりません。なぜ '(char *)m'は動かないのですか?組み込みシステムでは、ハードウェアコンポーネントのアドレスをポインタに割り当てるために頻繁に使用します。 –

+0

'operator <<'の利用可能なオーバーロードと混同している可能性があります。例えば、 'cout'は' char * 'を文字列として出力します。 'void *'をポインタとして使用します。 –

答えて

1

Hereは、static_castで実行できることの完全なリストです。そして あるクラスへのポインタを別の非関連クラスへのポインタにキャストするオプションはありません。これは標準的なC++の動作ではないからです。
でも、Cスタイルのキャスト「reinterpret_cast」を使用することも、「キャスト」unionを使用することもできます。