Windowsの64ビット版でVisual Studioを使用して開発したC++プロジェクトでサードパーティのCライブラリを使用しようとしています。 32ビットと64ビットの両方が正常にコンパイルされました。long型への8ビットポインタのキャスト
double* foo(){
double* b; long a; long i;
/*
... do some stuff to assign values to b, a, i ...
*/
return ((long)b + a + i);
}
* x86アーキテクチャでは4バイトでダブル表されること
問題は(少なくともWindowsの場合)で、8:それは、以下の場合と同様に、64ビットで動作しているときしかし、私は外部のライブラリで問題を見つけましたx64のバイト数なので、returnステートメントにb
のキャスティングが実行されません。
私の質問は、8ビット表現からポインタb
の4バイトアドレスを "抽出"できる方法があるからです。つまり、表現を維持するためには、意味がありますか?(b+a)
?
おかげ
ビットとバイトの違いを理解してください。効果的なアイデアの伝達には不可欠です。ポインタは、ビットではなく、4バイトまたは8バイトです。 –
私は明らかに何かが間違っているかもしれませんが、問題を解決しない単純なリターンラインからの削除(長い)でしょうか? – MTilsted
問題のコードは意味をなさない。それは何をするように設計されているかは不明です。したがって、適切な修正が何であるかを知ることは難しいです。それがあなたのコードなら、私のアドバイスは、すべてのキャストを避けることです。 –