minamikotori 发表于 2020-12-27 19:13:03

序列点与自增运算符的初级问题

如图,如何用序列点来解释结果呢
逗号是序列点,c+1 是个完整表达式,这样理解对吗
那++a 和 b++ 又该如何解释呢

weiter 发表于 2020-12-27 19:25:28

++a:第一个+表示1?
b++:第二个+表示1?
以上为个人观点,是否正确有待考证
百度说法:https://zhidao.baidu.com/question/149550117.html

minamikotori 发表于 2020-12-27 19:30:08

weiter 发表于 2020-12-27 19:25
++a:第一个+表示1?
b++:第二个+表示1?
以上为个人观点,是否正确有待考证


能否用序列点解释下呢{:10_302:}

weiter 发表于 2020-12-27 19:30:55

minamikotori 发表于 2020-12-27 19:30
能否用序列点解释下呢

我没有深入学习……我只学到了数据类型那一块前面一点……{:10_266:}

weiter 发表于 2020-12-27 19:32:13

我……评分用完了{:10_266:}剩下五鱼币还不回去{:10_266:}

minamikotori 发表于 2020-12-27 19:32:24

weiter 发表于 2020-12-27 19:30
我没有深入学习……我只学到了数据类型那一块前面一点……

{:10_278:}

weiter 发表于 2020-12-27 19:32:58

minamikotori 发表于 2020-12-27 19:32


这学习就很不深入对吧……{:10_278:}

minamikotori 发表于 2020-12-27 19:33:16

weiter 发表于 2020-12-27 19:32
我……评分用完了剩下五鱼币还不回去

没事 我鱼币不怎么缺

jackz007 发表于 2020-12-27 19:33:28

      ++ a 与 a ++ 的区别是,前者先执行 a = a + 1,然后才引用,后者先引用,再执行 a = a + 1
      假设a = 5 则:
      printf("%d" , ++ a) ;
       等效于
      a = a + 1      ;// a = 6
      printf("%d" , a) ;// 打印数值 6,
       而
      printf("%d" , a ++) ;
       等效于
      printf("%d" , a) ;// 打印数值 5
      a = a + 1      ;// a = 6

minamikotori 发表于 2020-12-27 19:36:58

本帖最后由 minamikotori 于 2020-12-27 19:38 编辑

c语言不是没有定义这样的行为吗,cpp中提到赋值运算符、递增运算符和递减运算
符对运算对象做的改变必须在程序执行下一条语句之前完成。

minamikotori 发表于 2020-12-27 19:39:02

jackz007 发表于 2020-12-27 19:33
++ a 与 a ++ 的区别是,前者先执行 a = a + 1,然后才引用,后者先引用,再执行 a = a + 1
       ...


c语言不是没有定义这样的行为吗?,cpp中提到赋值运算符、递增运算符和递减运算
符对运算对象做的改变必须在程序执行下一条语句之前完成   

jackz007 发表于 2020-12-27 19:48:48

minamikotori 发表于 2020-12-27 19:39
c语言不是没有定义这样的行为吗?,cpp中提到赋值运算符、递增运算符和递减运算
符对运算对象做的改变 ...

      你根据什么这么说?自增自减运算是 C 语言与生俱来的东西,从它诞生的那一刻起,就一直都有!

minamikotori 发表于 2020-12-27 19:55:17

jackz007 发表于 2020-12-27 19:48
你根据什么这么说?自增自减运算是 C 语言与生俱来的东西,从它诞生的那一刻起,就一直都有!

是有这个运算符,但 Cprimer Plus 这本c语言的书籍中提到 c语言未规定他们运算顺序,类似x=(4+y++)+(6+y++)这种
不过还是谢谢你了
页: [1]
查看完整版本: 序列点与自增运算符的初级问题