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

标签 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];

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

最佳答案

你可以使用

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_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/

相关文章:

javascript - 传入对象和数组变量

java - 如何循环遍历数组并从 ArrayList 创建子字符串?

c - 在 C 中使用 sscanf 从文件中读取多行字符串

c - C中数组的地址等于它的第一个元素吗

python - 尝试将自定义 C++ 矩阵传递给 numpy 数组

javascript - 生成随机整数 JavaScript

javascript - 重新构造对象数组的最佳方法是什么?

c - 如何在 Windows 上编译 Ruby C 扩展和链接 libcurl

c - 这两个循环中哪个更快?

将整数转换并存储为 char 指针