在C中展开For循环
我试图将这个循环展开 2 倍。
for(i=0; i<100; i++){
x[i] = y[i] + z[i];
z[i] = y[i] + a[i];
z[i+1] = y[i] * a[i];
}
我把它展开到:
for(i=0; i<100; i+=2){
x[i] = y[i] + z[i];
x[i+1] = y[i+1] + z[i+1];
z[i] = y[i] + a[i];
z[i+1] = y[i] * a[i];
}
我不确定如何展开 z[i] 的行,因为原始 for 循环已经有 z[i+1]。任何人都可以帮助我理解这一点吗?
回答
我会说简单地添加 i+1 的行。但是您必须确保它们的顺序正确,因此:
for(i=0; i<100; i+=2){
x[i] = y[i] + z[i];
z[i] = y[i] + a[i];
z[i+1] = y[i] * a[i];
// next iteration
if (i+1 < 100) {
x[i+1] = y[i+1] + z[i+1];
z[i+1] = y[i+1] + a[i+1];
z[i+2] = y[i+1] * a[i+1];
}
}
编辑
为了使其对所有上限(不仅是甚至)安全,您必须在循环中添加一个 if
正如 Adrian Mole 提到的,最好首先检查上限或方便地设置数组的大小