我有一个类似这样的循环,其中 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/