c语言!a 为什么a不是3

不属于UB赋值运算是从右往左的,因此执行b=4返回b(值为4)再执行b=3返回b(值为3),再执行a=ba和b的值都是3。

这种代码是真实世界里基本不会出现的代码其意义只在于让你叻解2个知识点:

  • 赋值运算是从右往左的(这样才能让a = b = 1这种表达式合法);
  • 括号运算符优先级更高(你可以不记得其他运算符优先级,但必須记得括号是最优先的去掉括号的话变成a = b = 4 = 3就无法通过编译,因为先执行4 = 34是右值)。

PS:如果是C代码用gcc编译会报错:

但用g++编译不会报错。

因为c语言!a中赋值运算返回的是右值简单理解就是无法出现在赋值符号左边,而C++中赋值运算返回的是左值

这个写法语义上是错误的导致未定义行为。

原因是 + 两边的运算数求值是无序(可以互相穿插)的而同一标量类型对象上多于一次的无序修改,或无序的读取和修改是未定义行为


标量类型即算术类型(整数、浮点数)和指针类型。

--a先执行a-1后执行程序

a-- 先执行程序后執行a-1

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 c语言!a 的文章

 

随机推荐