使用自增操作符添加数组元素



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

#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 

您的程序有未指定的行为。在表达式a[top]+a[--top]中,C和c++语言标准没有规定a[top]a[--top]中哪一个先求值,也没有规定--运算符相对于其他表达式何时执行。编译器可以根据它们认为合适的情况对其进行计算。首先计算--top,将top设置为0,然后计算a[0]+a[0],结果为20。

不要在对一个变量进行前递增、后递增或自减的表达式中使用该变量两次。

要理解为什么会发生这种情况,请更改最后一个printf,将top和总和打印在一行中,如下所示:

printf("top is %d and the value of the sum is %d n",top,a[top]+a[--top]);

尝试计算并打印

int y1 = a[top]; 
int y1 += a[--top]; 
top = 1;
int y2 = a[top] + a[--top];

这个可以帮助你。关键是执行[——top];在你的代码中是在执行[top]之前完成的,因为它们没有指定。

这里,在这一行中:

printf("value of sum is %d n",a[top]+a[--top]);

由于——top, top再次变为0(——top为——1)。然后将a[0]和a[0]相加,它没有给出预期的输出。我认为这是由于——操作符的优先级高。

如前所述,最好分别计算,然后再打印。

PS:如果上面有任何错误或不完全正确,请告诉我。我喜欢从错误中学习

最新更新