您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
C语言-y++到底怎么执行的?
字符,赋值,变量C语言-y++到底怎么执行的?
发布时间:2019-02-08加入收藏来源:互联网点击:
C语言-y++到底怎么执行的?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
你好,我是计算机教育刘老师,很高兴回答你的问题,针对你这个技术问题,我给出如下的详细的解答。
y++和++y的主要区别有两个:
1、y++ 返回原来的值, ++y返回加1后的值
2、y++不能作为左值,而++y可以
我相信大家第一点应该都能理解,我们重点来说一下第二点,就是解释一下什么是左值。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。
左值是可以放到赋值符号左边的变量。但能否被赋值不是区分左值和右值的一句。
比如,C++的const左值是不可赋值的,而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
int i = 0;
int *p2 = &(i++); //错误
++i = 1; //正确
i++ = 5; //错误
那么为什么i++不能作为左值,而++i可以,看他们各自的实现一目了然。
运算符读取规则
C语言对于解决这个问题的解决方案可以归纳为一个很简单的规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是:从左到右一个一个字符的读入,字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理策略有时被称为“贪心法”,或者,更口语化一点,称为“大嘴法”,Kernighan与Ritchie对这个方法的表述如下,“如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个号将包括从该字符之后可能组成一个符号的最长字符串。”
希望我的回答可以帮助到您,谢谢大家的支持!
回答于 2019-09-11 08:43:50
c语言中y++和++y的区别主要在于自增的顺序,y++代表着y参与运算之后,y的值会自增1,通俗来讲也就是“先加1后赋值”,而++y则表示y自增1之后再参与其他运算,通俗说的“先赋值再加1”。
回答于 2019-09-11 08:43:50
-y++ 这个算式在y的两侧有两组运算符,左侧是取负运算,它的运算级较高,所以先执行负值运算,然后再在下一次运算执行前先执行y右侧的++运算,自增1。
假设在此句中变量y的值等于3,则此算式在此处为-3,变量y在参下一次运算前先自增1。
回答于 2019-09-11 08:43:50
这个涉及到C语言中运算符优先级的问题,++在前在后执行顺序是不一样的。y++是先取得y的值完成语句的执行,然后再➕1,说直白点就是在变量后面的是先用完变量,然后再➕1,如果是在变量前面的就是先➕1然后再用这个加完的变量的值。
举个例子,y=5,print y++,这个时候输出的5。print ++y,这个时候是输出的6。
不知道我这么回答,你是否可以明白。可以关注我,期待你的回复。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |