在下面的代码我试图用增量运算符添加数组的两个元素,但我得到输出和是错误的。如果我在代码中犯了任何错误,请帮助我
#include <stdio.h>
int main(void) {
int a[2];
int top=-1;
a[++top]=10;
a[++top]=20;
printf("a0 is %d \n",a[0]);
printf("a1 is %d \n",a[top]);
printf("value of sum is %d \n",a[top]+a[--top]);
}
最后一行的输出应为30作为i并将数组中的两个值相加。但我得到的输出如下
a0 is 10
a1 is 20
value of sum is 20
答案 0 :(得分:4)
您的程序有未指定的行为。在表达式a[top]+a[--top]
中,C和C ++语言标准没有指定首先评估a[top]
和a[--top]
中的哪一个,并且他们没有指定何时{{1}相对于其他表达式执行运算符。编译器可以根据需要对此进行评估。你首先计算--
,将--top
设置为0,然后计算top
,产生20。
不要在表达式中使用变量两次,在该表达式中,您可以预先增加或减少它。
答案 1 :(得分:0)
要理解为什么会发生这种情况,请更改您的上一个printf以打印出top
和一行中的总和,如下所示:
printf("top is %d and the value of the sum is %d \n",top,a[top]+a[--top]);
这应该表明预增量操作不会发生在你认为的执行点上。
答案 2 :(得分:0)
尝试计算并打印
int y1 = a[top];
int y1 += a[--top];
top = 1;
int y2 = a[top] + a[--top];
这可以帮到你。 重点是执行[ - top];在您的代码中,在执行[top]之前完成,因为它们未被指定。
答案 3 :(得分:-1)
这里,在这一行:
printf("value of sum is %d \n",a[top]+a[--top]);
由于 - top ,top再次变为0(--top为--1)。 然后添加[0]和[0],它不会给出预期的输出。 我认为这是由于 - 操作符的高优先级顺序。
如前所述,最好单独计算再打印。
PS:请告诉我以上是否有任何错误或不完全正确。我喜欢从错误中吸取教训。