我认为复制数组的元素如下:
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++;
}
正在复制,但值不是通过引用,但我想确保这将是深拷贝,而不仅仅是引用或指针的浅拷贝。
我知道这可能是简单而荒谬的qustion,但我找不到类似堆栈而不是memcpy()所有数组,但我想只复制一些元素,例如每隔一个元素,或复制1-3元素并跳过第4个元素,(如果i%4 == 0跳过元素)。
答案 0 :(得分:2)
new_bytes_array[j]
评估为unsigned char
。
假设old_bytes_array[i]
也这样做,那么
new_bytes_array[j] = old_bytes_array[i];
复制unsigned char
而不是指针,而不是unsigned char*
。
答案 1 :(得分:0)
是的,您展示的作业会分配一个unsigned char
,即&#34;一个字节&#34;在大多数典型的计算机上,它不会复制指针而是原始数据。
这是一个完整的功能,可以完成您想要的任务,并修复一些小问题:
void * copy_every_second_byte(const void *src, size_t length)
{
if(src == NULL || length == 0)
return NULL;
unsigned char *out = malloc(length / 2);
for(size_t i = 0, j = 0; i < length; ++i)
{
if(i % 2 == 0) continue;
out[j++] = ((unsigned char *) src)[i];
}
return out;
}