我有一个数组,它填充了第一个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];
这就像我想要的那样,但是这可能会减慢大型数据集的速度。我想知道是否有一个技巧可以通过一个小指针算法来做到这一点。
答案 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_depth
为sizeof(int)
,sizeof orig_depth
为100 * sizeof(int)
。
sizeof *orig_depth
对sizeof(int)
的优势在于,您可以更改类型,而无需更改每个sizeof
。最好的实践名称是:单一真理来源https://en.wikipedia.org/wiki/Single_source_of_truth