使用增量运算符添加数组元素

时间:2015-09-05 04:16:07

标签: c++ c

在下面的代码我试图用增量运算符添加数组的两个元素,但我得到输出和是错误的。如果我在代码中犯了任何错误,请帮助我

#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 

4 个答案:

答案 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:请告诉我以上是否有任何错误或不完全正确。我喜欢从错误中吸取教训。