作业帮 > 综合 > 作业

C语言里的单目运算符 表达式-i++ 和*p++ 单目运算符结合顺序是从右向左的,为什么第一个表达式可以换为

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/12 22:33:40
C语言里的单目运算符 表达式-i++ 和*p++ 单目运算符结合顺序是从右向左的,为什么第一个表达式可以换为
-(i++) 而第二个却要转换为(*p)++,
从右向左结合,到底是以什么为准,怎么个从右向左结合
第二个写错了,应该是 -i++转换成-(i++)就可以,而*p++ 却要先算*p 然后p++
为什么不能转换成*(p++)和i的那个一致呢
C语言里的单目运算符 表达式-i++ 和*p++ 单目运算符结合顺序是从右向左的,为什么第一个表达式可以换为
所谓的结合行,是在优先级相同的情况下才自由向左(或者自左向右的),在单目运算里面++比-和*优先级都要高.你列的式子里,第一个是对的,第二个应该是*p++就等于*(p++),相当于取p所指地址的内容,然后p自增,增加的大小等于所指类型的字节数
再问: 第一个是对的,但是第二个 *p++ 就是先让p和*结合 然后p和++结合,代码运行了,你说错了,我不明白的是 为什么他不能和第一个一样像i 先和++结合,然后算负号
再答: 我没说错啊,给你看一下我运行的情况吧。 printf里的参数是从右向左计算的,所以先算(*p)++,即返回a[0]的值,然后将a[0]自增;然后再算*p++,此表达式先算p++,返回当前p值,再将p自增,所以这里等于取的当前a[0]的值;最后*p就取的a[1]的值。