在C中从数组本身创建数组内部值的副本

时间:2017-08-04 08:51:00

标签: c arrays

我有一个数组,它填充了第一个x_size*y_size值,现在我需要在后面的内存中将它们复制DATA_JUMP次。

for(int i=1; i < DATA_JUMP; i++)
 for(int k = 0; k < x_size*y_size; k++)
  orig_depth[k + i*x_size*y_size] = orig_depth[k];

这就像我想要的那样,但是这可能会减慢大型数据集的速度。我想知道是否有一个技巧可以通过一个小指针算法来做到这一点。

1 个答案:

答案 0 :(得分:3)

您可以使用

memcpy(orig_depth + i*x_size*y_size, orig_depth, x_size*y_size * sizeof *orig_depth);

而不是内循环。您必须确保i*x_size*y_size不是0,因为在这种情况下指针会重叠。

sizeof *orig_depth是数组中1个元素的大小,而sizeof orig_depth是整个数组的大小。
int orig_depth[100]; sizeof *orig_depthsizeof(int)sizeof orig_depth100 * sizeof(int)

sizeof *orig_depthsizeof(int)的优势在于,您可以更改类型,而无需更改每个sizeof。最好的实践名称是:单一真理来源https://en.wikipedia.org/wiki/Single_source_of_truth