C语言中带分号的赋值操作:属于表达式还是语句?
关于C语言中赋值是表达式还是语句的解答
赋值操作本身是表达式,这是C语言的核心特性。赋值表达式会返回赋值后左操作数的值,所以才支持a = b = c = 10这种链式赋值——本质是从右往左依次计算:先执行c = 10(这是个表达式,返回10),再把结果赋值给b(同样是表达式,返回10),最后赋值给a。
而当给表达式加上分号时,它就变成了表达式语句,这是C语言中语句的一种类型。比如b = 2;,其中b = 2是赋值表达式,加上分号后就构成了一条完整的执行语句。
结合你给出的代码具体分析:
- 第一段代码里的
a = b = c = 10;:a = b = c = 10是复合赋值表达式,加分号后成为一条表达式语句。 - 第二段代码里的
b = 2;、c = 3;、a = b + c;:每一行中,b = 2、c = 3、a = b + c都是表达式(前两个是单纯的赋值表达式,最后一个是包含算术表达式的赋值表达式),加分号后各自成为独立的表达式语句。
简单总结:赋值的“核心”是表达式,当它后面加上分号,就升级成了语句。很多资料的矛盾点,本质是混淆了“赋值表达式”和“表达式语句”这两个概念——前者属于表达式范畴,后者属于语句范畴,而表达式语句可以由任意表达式加分号构成,赋值表达式只是其中最常用的一种。
内容的提问来源于stack exchange,提问作者Qingyang Gu
相关产品推荐
相关产品推荐

