2011-04-30 48 views
-3

我有一个函数传递一个结构,而不是在arr本身上进行位操作,我想创建副本。如何制作无符号整数数组的元素的副本以进行位操作?复制位操作的指针

unsigned int * arr = cs->arr; // cs->arr is set as unsigned int * arr; 
unsigned int copy; 
memcpy(copy,arr[0], sizeof(unsigned int)); // Copy into copy the first element, for now 
int i = 0; 
while(copy != 0) 
{  
    i += copy & 1; 
    copy >>= 1; 
} 
return i; 

谢谢!

+0

您已经将它复制到'copy'中,那么怎么回事?你在寻找更好的方法? copy = arr [0]; – atoMerz 2011-04-30 07:30:02

+0

问题:“我如何扩展我所发布的用于处理'arr'的所有元素而不是第一个元素的代码”? – 2011-04-30 07:33:33

回答

1

你不需要memcopy。一个简单的数组访问就足够了:

unsigned int copy = cs->arr[0]; 
int i = 0; 
while(copy != 0) 
{   
    i += copy & 1; 
    copy >>= 1; 
} 
return i; 
0
copy = arr[0]; 

是所有需要的。 copy将具有与arr[0]相同的值,但不会以任何其他方式链接到它。 (即修改copy不会改变arr[0])。