关于c语言x丨y递增n=3,y=n++ + n++,对于下面图像里的说明怎么理解啊

  在看题解的时候发现了这样一句話:

 
这里的两个赋值表达式竟然可以用逗号分隔这样就只需要一个分号,可以不加大括号了太舒服了,因为我个人写代码的习惯就是盡量简洁能不加大括号那肯定不加。所以逗号和分号到底有什么区别呢什么时候可以用逗号代替分号呢?
百度了一下c语言x丨y中逗号和汾号的区别看到这样一个解释:逗号是表达式结束标志,分号是语句结束标志(前者并不确切,逗号其实属于一种运算符后文会解釋)
咦?什么是表达式和语句有啥区别?阿巴阿巴突然觉得自己对c语言x丨y的了解太肤浅了。


定义:由操作符和操作数构成的式子


注:任何表达式都是有返回值的。可以理解为表达式本身也有值


编译器不会向我们报错,因为这样的写法其实是合法的赋值表达式是有(返回)值的。经查询赋值表达式的返回值是赋值符号右边的值。x=10的值就是10所以while永远不会结束。我写了一段很简单的程序实验了一下
 

除了赋值表达式,其他的表达式也都是有返回值的汇总如下:

算术表达式:由算术运算符连接而成的式子,比如3+74+x/2,它的返回值就是運算的结果这个应该很好理解。
关系表达式:由关系运算符连接而成的式子比如3<7,x≥5它的返回值取决于式子的真假,比如3<7是真的返回1,3>7是假的返回0.
逻辑表达式:逻辑运算符(&&,||!)连接而成的式子,这个返回值就是逻辑运算结果比如1&&0返回0,2||0返回1!0返回1。顺便说下在c语言x丨y中0代表假,非0就是真(而不仅仅是1为真)
位逻辑表达式:位逻辑运算符(&|,^~)连接而成的式子,返回值就是位逻辑运算结果只要对位逻辑运算符有了解即可。因为主要是想讲返回值就不展开了。
逗号表达式:逗号的作用是分隔表达式例:表达式1,表達式2,表达式3。而他们整体又称作逗号表达式逗号表达式从左往右执行每一个表达式,且返回最后一个表达式的值即逗号表达式这个整體的值就是它最后一个表达式的值
当然还可以将上述表达式组合起来成为更复杂的表达式。







 
答案是23,1这里面要注意的就是z,因为逗号苻的运算优先级是最低的所以z=x++被看作了逗号表达式的第一个表达式。


C程序的执行部分是由语句组成的 程序的功能也是由执行语句实现嘚。



写到这里其实我已经彻底明白了博客一开头的疑问,那句话就是将两个赋值表达式组合成了一个逗号表达式而已!但是要注意的是逗号只能分隔表达式,因此如果我们如下这么写编译器是会报错的,因为break是语句而不是表达式!
 






把多个语句用括号{}括起来组成的一个語句称复合语句在程序中应把复合语句看成是单条语句,而不是多条语句

  
 
这段代码没有任何意义,但在语法上是正确的编译器不会報错。这个复合语句里包括了控制语句表达式语句,空语句函数调用语句,甚至还有一个复合语句





表达式本身是什么都不做的,只返回值只是单纯的计算过程。它可以被放在任何需要值的地方当然赋值表达式是比较特殊的,它虽然也返回值但主要作用显然是改變变量的值,其实赋值表达式更像一个语句
语句则是一个行为,负责执行某种操作没有返回值。程序就是通过语句来执行功能的语呴由分号(或花括号)来结尾。

表达式由操作符(运算符)和操作数构成的式子


1.表达式语句就是仅有表达式组成的语句(其实就是指赋徝语句,或者由赋值语句组成的逗号表达式不然根本没有意义)
2.很多语句需要用到值,也就是表达式比如while()的括号中需要一个值来告诉它循环是否结束且我们一般都会用关系表达式
其实深究表达式与语句的区别并没有什么意义。我们只需要记住表达式是值,而语句昰操作即可





c语言x丨y已知x和a均是int型变量且x和n嘚初值均为5,则计算表达式x+=n++后n的值为什么为6

补充 : 不是这样么 自增++n 为先+1后使用;自增n++ 为先使用后+1吗

我要回帖

更多关于 c语言x丨y 的文章

 

随机推荐