标题:逗号与运算符优先级问题
只看楼主
Dxoad
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-4-16
结帖率:100%
已结贴  问题点数:20 回复次数:4 
逗号与运算符优先级问题
程序代码:
#include<iostream>
int main() {
    int a =10,b,c,t =0,s =100;
    a += 20;
    c = b *= b = a;    //b不是等于零的吗 ,还有运算顺序是什么
    std::cout << a <<" "<< b <<" "<< c <<" "<< t;
}



程序代码:
#include<cstdio>
int main() {
    int a =5;
    printf("%d %d %d",a,a++,a++);
}

这个为什么返回值是 7 6 5 而不是5 5 5



int j = 10,k = 1000;
int i = (k+2,j+100,999+j);
为什么会取到最后一个,这里面的括号有什么作用,不加括号为什么会报错而加了就没问题
逗号起到什么作用



[此贴子已经被作者于2020-4-16 19:05编辑过]

搜索更多相关主题的帖子: 逗号 优先级 运算符 int main 
2020-04-16 18:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
c = b *= b = a;    //b不是等于零的吗 ,还有运算顺序是什么
哪里有b等于零的代码?我看了一遍又一遍,没找到。
“还有运算顺序是什么” --- 顺序是 (c = (b *= (b = a)))

printf("%d %d %d",a,a++,a++);
这个为什么返回值是 7 6 5 而不是5 5 5
C++17 前为未定义行为,C++17 起为未指明

int i = (k+2,j+100,999+j);
为什么会取到最后一个,这里面的括号有什么作用,不加括号为什么会报错而加了就没问题
i 被赋予 (k+2,j+100,999+j) 这个表达式的值,k+2,j+100,999+j 这个表达式的值是 最后一个子表达式的值。
“不加括号为什么会报错” --- 那你觉得 int i=k+2, j+100, 999+j; 是什么含义,定义一个int变量名字叫 j+100 吗?

2020-04-16 20:09
Dxoad
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-4-16
得分:0 
回复 2楼 rjsp
没认真看,,,解决了

[此贴子已经被作者于2020-4-16 22:28编辑过]

2020-04-16 22:04
Dxoad
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-4-16
得分:0 
回复 2楼 rjsp
等一下,dalao请留步,还有一个疑惑
(k+2,j+100,999+j);
k+2和j+100是不是可以忽略,直接看最后一个子表达式
k+2和j+100是不是没有参与运算,如果参与了那他们计算得出的值参加赋值操作了吗(如果中间出现错误数据了,他还会返回最后一个子表达式的值吗)


做题一直很迷,前面的表达式(指k+2和j+100)不知道是否进行处理并参加运算(比如出现x--,--x),是否可以直接忽略看最后一个,还是分情况处理

[此贴子已经被作者于2020-4-16 22:31编辑过]

2020-04-16 22:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
是不是可以忽略(优化)掉,要看它有没有副作用。

对于逗号表达式 (a, b) 先执行(评估)子表达式a,再执行(评估)子表达式b,而 整个表达式(a, b) 的评估值是子表达式b的评估值。
2020-04-16 22:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501080-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016034 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved