数组等于另一个数组

use*_*281 9 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;
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*son 12

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

例如:

memcpy(array1, array2, sizeof(array1));
Run Code Online (Sandbox Code Playgroud)

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

最后,你需要使用memcpyover for-loop,因为该函数通常使用机器代码级别的指令优化复制内存块,这将远远超出for循环的效率,即使编译器优化已经转向上.