我有一个数组,其中填充了第一个 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];
这就像我想要的那样,但是这可能会在大型数据集上减慢速度。我想知道是否有一个技巧可以通过一点指针算术来做到这一点。
最佳答案
你可以使用
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
关于在 C 中从数组本身创建数组内部值的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45502295/