数组等于另一个数组

时间:2012-02-13 15:10:16

标签: 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;
}

1 个答案:

答案 0 :(得分:11)

您必须使用memcpy等函数手动将内存从一个阵列复制到另一个阵列。

例如:

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

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

最后,你需要在memcpy循环上使用for,因为该函数通常使用机器代码级别的指令优化复制内存块,这些指令将远远超出即使打开编译器优化,for循环的效率也是如此。