为什么当我对数组使用增量操作时,do for 循环不起作用

why do for loop does not work when I use increment operations for the arrays

本文关键字:操作 do for 不起作用 循环 数组 为什么      更新时间:2023-10-16

我的代码中有两个数组,每个数组都有 7 个元素,我使用了 for 循环:

for (int i = 0; i < 7; i++)
{
distance = x[++i] - x[i];
area = trapezoidArea(distance, y[++i],y[i]);
sum += area;
}

我想计算梯形的面积。x[1]-x[0] 的差值将给我高度,y[1] 是第一边,y[0] 是第二边。

这个 for 循环不起作用,我想知道为什么。

在这种情况下,您不能将++用作后置或前递增运算符。
这将更改i变量的值,因此for循环将没有您想要的行为。
正确的方法是:

for (int i = 0; i < 6; i++)
{
distance = x[i+1] - x[i];
area = trapezoidArea(distance, y[i+1],y[i]);
sum += area;
}

小心你必须循环到i<6因为如果你让 7,你会尝试访问 x[7+1] = x[8],你会有undefined behavioursegmentation fault

++i会增加i。因此,您在一次循环中将i增加三次,最重要的是,由于排序,它也可能是未定义的行为。x[i]i应该是什么?x[++i]++i前的i增加了它,还是增加了之后?

如果您想要一个超过i而不增加它,请改为i+1。将x[++i]替换为x[i+1],同样替换为y[++i]应该可以解决此问题。但是,如果没有看到所有代码,就不可能说这是否是唯一的问题。

当您在方括号中++i时,您实际上将i的值增加了 1。您应该做的是i + 1并仅将++i保留在循环声明中。