我有一个这样的循环,其中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;
}
答案 0 :(得分:11)
您必须使用memcpy
等函数手动将内存从一个阵列复制到另一个阵列。
例如:
memcpy(array1, array2, sizeof(array1));
请记住,我们可以在sizeof
上使用array1
运算符,因为它是在堆栈上分配的显式数组。作为评论者注意到,我们传递目标的大小以避免缓冲区溢出。请注意,对于静态分配的数组也可以使用相同的技术,但是不能在使用malloc
在堆上动态分配的数组上使用它,或使用某些指针指向 - 在这些情况下,你必须以字节为单位显式传递数组的大小作为第三个参数。
最后,你需要在memcpy
循环上使用for
,因为该函数通常使用机器代码级别的指令优化复制内存块,这些指令将远远超出即使打开编译器优化,for循环的效率也是如此。