网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月03日
漏签
0
天
c语言吧
关注:
790,930
贴子:
4,297,823
看贴
图片
吧主推荐
视频
游戏
19
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
求助
关于自增自减运算符的困扰求助
只看楼主
收藏
回复
吃两只梨🍐
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
大佬们,关于书上的完整表达式该怎么判断哇,晕晕乎乎的,不知道咋判断是子表达式还是完整的,还有图三的程序给了警告⚠️说是未定义,但是编译器运算顺序是执行完x- -后x就变成了0,再参与右边y+x的运算,后缀不应该是先使用后改变吗
吃两只梨🍐
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
来大佬给讲讲球球了
吃两只梨🍐
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
关系运算符中的左、右表达式是不是都是完整表达式呀,但是如果是完整表达式,却又给了未定义
Dangfer
小吧主
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
同一序列点内同时存在副效应和值计算,属未定义行为
GTA小鸡
吧主
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这一部分的术语对于初学者来说并不是重点,只需要记住并遵循书上的两句话,就可以避免犯大部分此类的错误
GTA小鸡
吧主
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
(x--)>(y+x)?10:20
这个表达式有什么问题?第一,C语言没有规定大部分双目运算符的两侧子表达式哪个先被求值。因此不能确定编译器先计算x--的值,还是先计算y+x的值,而求值顺序不同可能导致x的值不同,因此x的值无法确定。
第二,C语言只保证所有的副作用在抵达下个序列点之前发生,没有规定具体时机。在这个表达式中只有三目运算符的?号位置是序列点,而子表达式(x--)>(y+x)中没有序列点,因此,即便要求编译器先计算x--,再计算y+x,也不能确定子表达式x--导致x的值递减1的副作用究竟在何时发生,只能确定它在计算完(x--)>(y+x),抵达?号之前发生。这意味着编译器可以在计算y+x时使用x的原值,然后令x--的副作用生效;也可以先令x--的副作用生效,然后在计算y+x时使用x递减后的值。因此,x的值依旧无法确定。
哪怕你不知道这些语言标准中的专业术语,只需要简单记住上图中的两句话就能避免写出类似的错误表达式。这个表达式违反了上图中的第二条规则,“如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符”。
听取呱声一片
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这种题就是纯为难人来的,生产环境是个正常人都不可能这样写代码
遂逸
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个题属于未定义行为。
条件运算符?:的第一个表达式结束后有个序列点,在该序列点前需要完成第1个表达式的所有求值和副作用,但求值和副作用的执行顺序没有定义。
该例中的第1个表达式是 (x--)>(y+x), 表达式的副作用是x的值自减1,其可能发生在(y+x)之前或之后。因子表达y+x的求值与其x自减1发生的先后有关系,导致结果的不确定性。因此第1个表达式存在未定义行为。
啊东西啊啊无悔
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
关于“书上的完整表达式”,通常是指在数学、编程或算法领域中,一个可以独立执行的数学或逻辑表达式。它是一个由运算符和操作数组成的整体,可以表示为一个数学公式或逻辑公式。
要判断一个表达式是否完整,可以根据以下几点:
1. **运算符和操作数**:一个完整的表达式通常包含至少一个运算符(如加法、减法、乘法、除法等)和操作数(如数字或变量)。
2. **括号**:括号可以用来分组操作数和运算符,形成一个完整的表达式。例如,在表达式 `(a + b) * c` 中,`(a + b)` 是一个完整的子表达式,因为它由括号包围,包含了运算符和操作数。
3. **优先级和结合性**:某些运算符(如乘法和除法)具有比其他运算符(如加法和减法)更高的优先级。同时,运算符的结合性决定了表达式的解析方式。例如,在表达式 `a + b * c` 中,由于乘法的优先级高于加法,`b * c` 首先被计算,然后与 `a` 相加。
4. **完整性检查**:有时候,根据上下文或特定规则,可以判断一个表达式是否完整。例如,在编程语言中,一个完整的语句通常以分号结尾。
至于你提到的图三的程序警告,关于“未定义”的问题,可能是由于在代码中某个地方使用了变量 `x`,但在使用之前没有对其进行定义或初始化。编译器会按照特定的顺序(例如先执行 `x--` 操作)来解析和执行代码,但如果在没有定义的情况下使用变量,会导致编译错误或警告。为了避免这种问题,应该在使用变量之前先定义并初始化它。
至于后缀(后置)操作的问题,你提到的“先使用后改变”是指后缀操作符的特性。后缀操作符(如 `x--`)在表达式中表示先使用变量的值,然后再进行自减操作。例如,在表达式 `y + x--` 中,首先使用 `x` 的当前值参与加法运算,然后 `x` 的值再减 1。这与前缀操作符(如 `--x`)不同,前缀操作符是先进行自减操作再使用变量的值。
哥们安何鸿
帕秋莉糕
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示