c语言 关于 自增 后缀运算

bigPillow 2016-09-02 11:08:41
hi all,
下面是代码:

/*test.c*/
int main()
{
int a,b,c;
a=5;
b=5;
c=(a++)+(a++)+(a++);//语句1
printf("%d \n",c);//这里输出的是18
c=(++b)+(++b)+(++b);//语句2
printf("%d \n",c);//这里输出的是24
}




求大神解释语句1和语句2的执行步骤及其原理。
谢谢。
...全文
155 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
尚书左仆射 2016-09-03
  • 打赏
  • 举报
回复
一般来说: c=(a++)+(a++)+(a++);//语句1===> 5 + 6 + 7 = 18(后缀++是返回加一前的值) c=(++b)+(++b)+(++b);//语句2===>6 + 7 + 8 = 21(前置++ 是返回加一后的值)
lm_whales 2016-09-03
  • 打赏
  • 举报
回复
前一个 从 15~21
lm_whales 2016-09-03
  • 打赏
  • 举报
回复
前一个 从 15~18 后一个 从18~24 都是对的 关键是 第一个式子有三个表达式 a++ 第二个式子有三个表达式 ++b 以任何顺序估值a++或者 ++b 这个表达式都对。 标准没规定,编译器随便安排。 这就是所谓的未定义
wang0635 2016-09-03
  • 打赏
  • 举报
回复
没有步骤,没有原理。 即使是同一个编译器的不同版本,结果都可能不同。 把讲这个东西的书扔掉吧

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧