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

标签 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 

最佳答案

您的程序有未指定的行为。在表达式a[top]+a[--top]中,C和C++语言标准没有指定a[top]a[中的哪一个--top] 将首先被计算,并且它们不指定何时相对于其他表达式执行 -- 运算符。编译器可以根据他们认为合适的方式对其进行评估。您首先计算 --top,将 top 设置为 0,然后计算 a[0]+a[0],得到 20 .

不要在表达式中使用一个变量两次,并在其中对其进行前后递增或递减。

关于c++ - 使用增量运算符添加数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409453/

相关文章:

c - 从 .txt 文件读取矩阵

c++ - C++ 动态分配内存中的动态内存分配

c++ - 操作系统信号处理循环 - 阻塞或非阻塞读取?

c - c call sync 和命令sync 做的一样吗?

c - 快速提问 : how to say if i < the max ammount of numbers stored in an array?

c - 程序无法成功运行?段错误 11、表达式被视为空指针; C

c - getter 方法的互斥量导致死锁

javascript - 如何将 emscripten 浏览器输入法从 window.prompt 更改为更合理的输入法?

python - 带有类型推导的 swig python 模板函数

c++ - 动态数组初始化