我有一个这样的循环,其中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循环的效率,即使编译器优化已经转向上.
| 归档时间: |
|
| 查看次数: |
29824 次 |
| 最近记录: |