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 回答