次のC++スニペットでは、a = bの割り当ては可能ですか??:
unsigned int * a;
D3DCOLOR b[16];
a=(unsigned int)b;
この割り当ては、b配列のすべての要素をaにコピーしますか?型キャストは大丈夫ですか?
次のC++スニペットでは、a = bの割り当ては可能ですか??:
unsigned int * a;
D3DCOLOR b[16];
a=(unsigned int)b;
この割り当ては、b配列のすべての要素をaにコピーしますか?型キャストは大丈夫ですか?
まず第一に、それは次のようになっているはずです。
a = (unsigned int *)b; // note the *
さらに重要なことに、これはの内容をa
指し示すだけであり、それをコピーb
しません。配列をコピーする場合は、たとえばfor
ループまたはを使用して明示的に行う必要があります。つまりstd::copy
、クラスなどを使用したくない場合です。
補足:にコピーするにa
は、メモリが必要ですa
!スタック上でそれを行うことができます:
unsigned int a[16]; // 16 is an example
または動的に(たとえば、を使用してnew
)。
あなたのコードは、あなたが指しているオブジェクトと同じメモリにアクセスできるポインターでは機能しません。正確に何をしたいですか?あなたのコードから、あなたが持っている配列はビット配列であり、対応する符号なし整数が必要だと思います。その場合は、次のようにします。
unsigned int a;
unsigned int length = 16;
D3DCOLOR b[length];
for(int i = 0; i < length; i++)
{
a |= b[(length-1) - i] << i;
}
これは各ビットを取り、必要な量だけシフトしてからaに書き込みます。詳しく知りたい場合は、c / c++ のビット操作をご覧ください。
(注: このコードは、ビッグ エンディアンのビット順を想定しています)。