【发布时间】:2018-07-09 13:20:25
【问题描述】:
我刚开始读C。
情况:
x = ( y = 3, ( z = ++y + 2 ) + 5 )
它首先评估 y = 3 然后评估 ( z = ++y + 2 )
我的问题:
它应该首先计算 ( z = ++y + 2 ),因为逗号(,) 的优先级远低于括号
我的思维方式:
由于优先级,我们选择外括号
那么我们需要计算括号
在这个(括号)下我再次开始应用优先规则
所以我先拿内括号来评估
附注:
这不是重复的
我已经浏览了这些链接,但仍然无法理解
Behavior of comma operator in C
What does the comma operator , do?
【问题讨论】:
-
您需要有人审查您的代码。不要单独编码。
-
,从左到右计算,左边的参数必须在右边之前计算。我看不出作为右侧子表达式的括号的优先级在这里有什么意义。 (确实,这段代码很糟糕。) -
@Bhaskar :运算符优先级规则使
x = ( y = 3, ( z = ++y + 2 ) + 5 )等同于x = ((y = 3), ((z = ((++y) + 2)) + 5))。不多也不少。 -
@Bhaskar 这是一个你需要解释才能通过你的课程的作业吗?如果不是,就忽略它,把这个表达扔掉,不要在这个地球上浪费你有限的时间来试图理解它。你永远不会在真正的程序中遇到这样的代码。你永远不会想写这样的代码。我是我认识的最有经验的 C 程序员之一,我懒得花我有限的时间在这个地球上试图理解那个表达式。出于所有意图和目的,它毫无意义。
-
运算符的优先级仅说明操作数和子表达式如何与运算符相关联,而不是它们的求值顺序。优先级表示逗号连接了我在之前的评论中列出的两个子表达式。举个更简单的例子,
a*b+c*d中运算符的优先级仅说明操作数被分组为(a*b)+(c*d),它不说明a*b和c*d的评估顺序。它们可以按任何顺序进行评估,因为+不强制执行顺序。另一方面,逗号运算符需要评估顺序。
标签: c