c - 数组等于另一个数组

标签 c arrays pointers

我有一个类似这样的循环,其中 arrayfunction 设置所有数组值,compute_with_both_arrays 根据这两个数组计算一个数字。

我在下面做的方法不适用于 array1 = array2。有没有一种方法可以做到这一点而无需在每个循环中运行两次 arrayfuncion?

float sum = 0;

float array1[10];
arrayfunction(0, array1);

for(i=1; i<10; i++) {
  float array2[10]
  arrayfunction(1, array2);

  float s;
  s = compute_with_both_arrays(array1, array2);
  sum = sum + s;

  array1 = array2;
}

最佳答案

您必须使用类似 memcpy 的函数手动将内存从一个数组复制到另一个数组.

例如:

memcpy(array1, array2, sizeof(array1));

请记住,我们可以在 array1 上使用 sizeof 运算符,因为它是在堆栈上分配的显式数组。正如一位评论者所指出的,我们传递目标的大小以避免缓冲区溢出。请注意,同样的技术也可以用于静态分配的数组,但是您不能使用它在使用 malloc 或一些指针在堆上动态分配的数组上-to-an-array ... 在这些情况下,您必须显式传递数组的大小(以字节为单位)作为第三个参数。

最后,您需要在 for 循环上使用 memcpy,因为该函数通常针对使用机器代码级别的指令复制内存块进行了优化这将远远超过 for 循环的效率,即使启用了编译器优化。

关于c - 数组等于另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262784/

相关文章:

c - 仅使用一个 pthread_t 变量和使用多个 pthread_t 变量有什么区别?

c++ - 我可以从哪里开始使用可编程硬件?

javascript - 在javascript中访问对象数组的值

c++ - 从随机起始位置开始的螺旋阵列

c - 函数根据数字删除单词 - C 编程

c - 当增加指针时,分配给指针的内存大小会发生变化

c - C 中的表达式求值

C Syslog.h 不写日志

arrays - 在不同数组中查找 "most common elements"的算法

c - 数组元素打印的地址是什么?