2

次のC++スニペットでは、a = bの割り当ては可能ですか??:

unsigned int * a;
D3DCOLOR b[16];
a=(unsigned int)b;

この割り当ては、b配列のすべての要素をaにコピーしますか?型キャストは大丈夫ですか?

4

2 に答える 2

8

まず第一に、それは次のようになっているはずです。

a = (unsigned int *)b; // note the *

さらに重要なことに、これはの内容をa 指し示すだけであり、それをコピーbしません。配列をコピーする場合は、たとえばforループまたはを使用して明示的に行う必要があります。つまりstd::copy、クラスなどを使用したくない場合です。

補足:にコピーするにaは、メモリが必要ですa!スタック上でそれを行うことができます:

unsigned int a[16]; // 16 is an example

または動的に(たとえば、を使用してnew)。

于 2012-05-24T12:53:29.753 に答える
-1

あなたのコードは、あなたが指しているオブジェクトと同じメモリにアクセスできるポインターでは機能しません。正確に何をしたいですか?あなたのコードから、あなたが持っている配列はビット配列であり、対応する符号なし整数が必要だと思います。その場合は、次のようにします。

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++ のビット操作をご覧ください。

(注: このコードは、ビッグ エンディアンのビット順を想定しています)。

于 2012-05-24T13:09:17.310 に答える