[C语言] c语言中的++问题

[复制链接]
3151|26
 楼主| yanghelovehuang 发表于 2018-8-7 09:22 | 显示全部楼层 |阅读模式
我一直不太明白, 例如 b=a++;  是先将a赋值给b然后a自身再++;可是++的优先级高于=啊,为什么先执行赋值呢?
ayb_ice 发表于 2018-8-7 09:48 | 显示全部楼层
是这样的,还有个什么左右原则吧
 楼主| yanghelovehuang 发表于 2018-8-7 09:59 | 显示全部楼层
ayb_ice 发表于 2018-8-7 09:48
是这样的,还有个什么左右原则吧

请问下什么是左右原则啊,和优先级冲突吗?
ayb_ice 发表于 2018-8-7 10:03 | 显示全部楼层
yanghelovehuang 发表于 2018-8-7 09:59
请问下什么是左右原则啊,和优先级冲突吗?

具体的细节我也不清楚,知道是这样的结果就行了

如果感兴趣,网上搜索下就知道了
 楼主| yanghelovehuang 发表于 2018-8-7 10:11 | 显示全部楼层
ayb_ice 发表于 2018-8-7 10:03
具体的细节我也不清楚,知道是这样的结果就行了

如果感兴趣,网上搜索下就知道了 ...

嗯嗯 我知道是这样可是又和优先级冲突,所以就想搞明白, 谢谢啊
 楼主| yanghelovehuang 发表于 2018-8-7 10:16 | 显示全部楼层
ayb_ice 发表于 2018-8-7 10:03
具体的细节我也不清楚,知道是这样的结果就行了

如果感兴趣,网上搜索下就知道了 ...

非常抱歉我还想问下,是不是在赋值的表达式里有++,是不是都是用a没++之前的值去运算运算完成后a再++? 例如 b=10 *a++ 先10*a赋值给b,a再++,不考虑优先级?
ayb_ice 发表于 2018-8-7 10:19 | 显示全部楼层
yanghelovehuang 发表于 2018-8-7 10:16
非常抱歉我还想问下,是不是在赋值的表达式里有++,是不是都是用a没++之前的值去运算运算完成后a再++?  ...

不建议用这种容易产生混淆的表达式来写程序,自己都不是很清楚,别人也会不清楚,

可以分成几句话来写

有个C专家说他只记得+-*/的优先级,其它的都不记得,虽然有点夸张,但是有道理的
 楼主| yanghelovehuang 发表于 2018-8-7 11:11 | 显示全部楼层
ayb_ice 发表于 2018-8-7 10:19
不建议用这种容易产生混淆的表达式来写程序,自己都不是很清楚,别人也会不清楚,

可以分成几句话来写

嗯嗯 我也觉得很偏 可是面试题就是面试这样的 虽然平时用不到 呜呜
梦幻泡影 发表于 2018-8-7 11:22 | 显示全部楼层
这样写:b = ++a;就对了
ayb_ice 发表于 2018-8-7 11:37 | 显示全部楼层
yanghelovehuang 发表于 2018-8-7 11:11
嗯嗯 我也觉得很偏 可是面试题就是面试这样的 虽然平时用不到 呜呜

++优先级高,是说a++不能分离,而不是b=a,然后对b++

john_lee 发表于 2018-8-7 12:10 | 显示全部楼层
C语言中有个“序列点(sequence point)”的概念,如果不理解这个概念,你很难搞明白你的问题。
taoest 发表于 2018-8-7 13:27 | 显示全部楼层
你说的优先级是结合优先级,不是运算优先级。++运算符本身就是后自增。
sjnh 发表于 2018-8-7 14:07 | 显示全部楼层
写了这些年程序,反而把优先级全忘记了,只记得()的优先级高,所以只要是没把握的,一律加(),从来没在优先级上出过问题;
包括 b=a++; 这种,我一般也是分开写;自己看的清楚,别人也看的清楚
 楼主| yanghelovehuang 发表于 2018-8-7 14:48 | 显示全部楼层
sjnh 发表于 2018-8-7 14:07
写了这些年程序,反而把优先级全忘记了,只记得()的优先级高,所以只要是没把握的,一律加(),从来没在 ...

没办法 面试需要 明知用不到,和上学学的东西一样
mailshichao 发表于 2018-8-7 16:25 | 显示全部楼层
如果++的优先级比较好,那不是a++与++a没有区别了
yu0405jie 发表于 2018-8-7 16:55 | 显示全部楼层
C++里面如果对这个++进行重载的话,重载函数大概是如下实现的
int c = a;
a = a + 1;
return c;
C语言里面是不是大概也是这样实现的
huang1007 发表于 2018-8-7 17:43 | 显示全部楼层
面试竟然面试这些,这不坑爹吗,很多大公司比如阿里的编程规范里面都表示,表达式一律用括号表示优先级,谁他喵去记那么多优先级啊,又容易出错
 楼主| yanghelovehuang 发表于 2018-8-7 17:54 | 显示全部楼层
huang1007 发表于 2018-8-7 17:43
面试竟然面试这些,这不坑爹吗,很多大公司比如阿里的编程规范里面都表示,表达式一律用括号表示优先级,谁 ...

真的,面试这些的还多呢, 还有值赋来赋去的,指针乱跑,总之越用不到越有
lihui567 发表于 2018-8-8 08:58 | 显示全部楼层
这个最好后面加括号,理解也方便,本来就是先++后赋值
xuplastic 发表于 2018-8-8 19:08 | 显示全部楼层
MSVC实测,先++再赋值!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0