在C ++中将数组变量分配给相同数据类型的指针

时间:2012-05-24 12:51:50

标签: c++ arrays visual-c++ pointers

在下面的C ++片段中,a = b可能是分配??:

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

这个赋值会将b数组的所有元素复制到一个?样式是否合适?

2 个答案:

答案 0 :(得分:8)

首先,应该是:

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

更重要的是,这只会使a 指向<{1}}的内容,并且复制它。如果要复制数组,则必须明确地执行此操作,例如使用b循环或for,即如果您不想使用类和内容。

附注:要复制到std::copy,您需要a的内存!您可以在堆栈中执行此操作:

a

或动态(例如使用unsigned int a[16]; // 16 is an example )。

答案 1 :(得分:-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 ++中的位操作。

(注意:此代码假定大端位顺序)。