【发布时间】:2016-09-28 09:57:12
【问题描述】:
我认为复制数组的元素是这样的:
unsigned char *new_bytes_array = malloc(sizeof(unsigned char)*length/2);
for(int i=0, j=0; i<length; i++) {
if(i % 2 == 0) continue;
new_bytes_array[j] = old_bytes_array[i];
j++;
}
正在复制但不是通过引用进行值,但我想确保这将是深层复制,而不仅仅是引用或指针的浅层复制。
我知道这可能是简单而荒谬的问题,但我在堆栈上找不到类似的东西,而不是 memcpy() 所有数组,但我只想复制一些元素,例如每隔一个元素,或者复制 1-3 个元素并跳过第 4 个元素,(如果 i%4 == 0 跳过元素)。
【问题讨论】:
-
您的代码按原样进行“深拷贝”。
-
请注意,
sizeof (unsigned char)始终为 1,因此编写1只是一种烦人的方式(在乘法的情况下是毫无意义的)。考虑删除它。 -
@unwind 实际上在不同的平台上,
sizeof(unsigned char)并不总是 1。所以我认为删除它不是一个好主意。 -
@litao3rd 不。你错了,这根本不是真的。
sizeof的返回值是char的单位,所以根据定义sizeof (char)是 1。 -
@unwind 是的,sizeof(char) 在不同的架构上并不总是 1。而
sizeof是在编译时执行的,所以我认为sizeof(unsigned char)比幻数1要好。
标签: c arrays unsigned-char