你学的这个不是C语言,而是谭语言。高校各专业的必备课程。学生普遍依靠背题通过期末考试。
号称计算机劝退第一人,不是让你学会,而是让你学不会,凭实力阻挡了无数青年入门计算机。避免了学生都去做计算机,没人去做别的行业工作这种情况。
配合Dos系统下的Turbo C,可以映衬的满脸发蓝,学习效果更佳。
看到很多答案吐嘈这个问题本身,我却认为,这是个很正常、定义清楚的问题。首先回答一下。
C语言在一个表达式中,遇到多个运算符的时候,要考虑优先级(precedence)和结合方向(associativity)去判断怎样求值。举例a op1 b op2 c
有两种可能性
(a op1 b) op2 c
a op1 (b op2 c)
如果 op1 的优先级较 op2 高,那么其语意就是第 1 种情况。
如果 op1 的优先级较 op2 低,那么其语意就是第 2 种情况。
如果 op1 和 op2 的优先级相同,那就要取决于结合方向。结合方向是「左至右」或「右至左」。例如,=
(赋值运算符)的结合方向为「右至左」,所以:
a = b = c
的语意为 a = (b = c)
而 -
(二元减运算符) 的结合方向为「左至右」,所以:
a - b - c
的语意为 (a - b) - c
C 语言运算符的优先级和结合方向在一般的入门编程书籍都会提到,也可参考 C 运算符优先级:
对于问题,+=
的优先级是 14(差不多是最低),==
是 7,那么 ==
会优先于 +=
,所以:
x += 5 == 4
的语意为 x += (5 == 4)
因为 5 == 4
为假,求值结果为 0
,所以该表达式又等于 x += 0
。
关于回答的部分结束。
至于有答案说到,学这种东西有什么用,编程不要这么写,我说一下愚见。
除为了功课、考试,要懂得答这种问题外,我觉得,在学习编程时,上述的优先级和结合方向等编程语言概念是应该要知道的。学会了,接触其他编程语言时,看一下它有没有这样的表,就能快速学习。当然,如果将来要学习编译原理,就更加知道编程语言的设计所要考虑的东西,以至如何把文本转成语法树等知识。
在实际应用中,学习了一些奇奇怪怪的东西也并不一定要写出来,但读懂是需要的。有时候,我们也会看到自己或其他人不小心写错了,做成 bug,如果看也看不出问题就是个问题。
C 语言标准是数百页的文档,大部分人不会仔细研究每个细节,我也不在例外。一个工程师可以说某些东西没用,可能因为他在工作中没用到。
知之为知之,不知为不知,是知也。
我觉得没有用的东西,只是一种个人的评价,没有普遍性。这不影响一个问题是否值得问,是否值得有一个详尽的答案,该答案是否让问者及其他人能获得收益。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有