什么是C中的子表达式?

什么是C中的子表达式?,c,expression,C,Expression,什么是C中的子表达式?我认为较小表达式的组合是子表达式 例如:a*(b+C/d)/20 b+c/d子表达式是否正确? 或者单独c/d是子表达式 什么是c中的子表达式。我认为较小表达式的组合就是子表达式 对。你想得对。 子表达式是表达式的一部分,它本身就是一个正确表达式 有时,子表达式是一个常量,如这里的20/20本身不是正确的表达式,因此它不能是子表达式。 : 子表达式是表达式的一部分,它对应于解析树中的子树,也就是说,解析树中的某个节点加上它的所有子节点。如果子表达式不是整个表达式,则它是正确

什么是C中的子表达式?我认为较小表达式的组合是子表达式 例如:
a*(b+C/d)/20

b+c/d
子表达式是否正确? 或者单独
c/d
是子表达式

什么是c中的子表达式。我认为较小表达式的组合就是子表达式

对。你想得对。
子表达式是表达式的一部分,它本身就是一个正确表达式

有时,子表达式是一个常量,如这里的
20
<代码>/20本身不是正确的表达式,因此它不能是子表达式。
:

子表达式是表达式的一部分,它对应于解析树中的子树,也就是说,解析树中的某个节点加上它的所有子节点。如果子表达式不是整个表达式,则它是正确的子表达式

要回答您的具体问题:

b+c/d是子表达式,对吗

还是单独的c/d是子表达式


a
b
C
d
20
b+C/d
a*(b+C/d)
都是子表达式。

子表达式是表达式中任何较小的单元,因此
C/d
b+C/d
都是子表达式

而这里的一个单位是两个操作数和中间的一个运算符的组合。
示例,

C/d
是一个单位,因此
(b+C/d)

注意,在
(b+C/d)
中,将首先执行
C/d
,然后
(b+C/d)
将是一个单元

另外,
a*(b+C/d)
是一个子表达式

/20
添加到表达式的其余部分将是完整表达式,因此它将不是子表达式

换句话说,我们可以说,在一个表达式中,除了在最后一个表达式中执行的表达式(执行顺序取决于运算符的优先级),完整表达式中包含的所有较小表达式都是子表达式

表达式是一系列运算符和操作数,它们 指定计算。表达式可以生成值,也可以 引起副作用。[§5.1]

所以,
b+c/d
c/d
都是表达式。甚至,
a
b
c
d
20
都是表达式。

子表达式不仅仅是更大表达式的任何部分

考虑:

2 * 3 + 4 * 5
这里
3+4*5
不是子表达式

完整表达式解析为

(2 * 3) + (4 * 5)
因此直接子表达式是
2*3
4*5

它们中的每一个都再次解析为较小事物的组合,其中
2*3
由子表达式
2
3
组成,而
4*5
由子表达式
4
5
组成

子表达式的这些子表达式是原始完整表达式的间接子表达式,因此它总共有以下子表达式:
2*3
4*5
2
3
4
5

而例如
3+4*5
不是子表达式

总之,子表达式是运算符或函数的参数,这样的参数表达式本身可以有子表达式


关于你的例子

a*(b+C/d)/20
还有你的具体问题

b+c/d
子表达式是否正确?或者单独
c/d
是子表达式

是,和是(大写/小写输入模)


然而,例如,这里的
b+C
不是一个子表达式。

我想你的意思是“更小”。使用“minimate”(最小值)会使它看起来与你想说的相反。注意:
/d)/20
不是子表达式。@GrijeshChauhan是的,因为它将在表达式的最后一部分进行计算,如果添加,将是整个表达式。“任何较小的单元”都可能有意义,但是为了让它有意义,必须解释“单位”这个词(否则它是全循环的)@AnkurKumawat:在新的文本中,“这里”这个词意味着它是一个示例解释,在我看来,这很好。添加一个“更一般的”可能不会有什么坏处,例如一元运算符和函数调用。但也不一定更清楚。在C语法的一个众所周知的怪癖中,在常量
-20
中,
20
是一个子表达式。@PascalCuoq;为您添加了新的更一般的定义:0。顺便说一句,我希望这里的符号是一元的。试着理解为什么b+C不是一个子表达式。这不是一个传递给除法运算符的论据吗?@ CONDIMANIAC:由于C++的语法,表达式<代码> B+C/D< <代码>被解析为<代码> B+(C/D)< /代码>。一种简化的查看方式是,
/
+
具有更高的优先级,并且到处都可以找到运算符优先级表。然而,值得注意的是C++标准只指定了语法,从中推导出优先级,并且简单的优先视图在某些情况下会崩溃,例如对于<代码>:< /Cord>选择运算符。我所知道的唯一一种对算术运算符没有有效优先级的通用编程语言是旧的Smalltalk。