关于i++和++i有什么具体的问题会有很多新手中的新手在遇到实际的问题事时会比较不太好理解,看着书上说的好像已经明白但是其实很多书上讲还是没有很详细,导致具体有些问题不好理解,下面我会举几个具体的例子来比较详细的解释这两者的区别:
1:首先我们来看看 i++
int i=1,j;
j=i++;
此代码我们会得到结果j=1;
再来看
int i=1;
i=i++;
此时得到的结果是i等于2;
解析:
首先 j=i++中我们是先将i值(1)赋值给了j,执行完赋值之后i自增;
i=i++;也是一样的道理先是将i值赋值给了i,也就是说赋值完之后i的值是1,随后i自增得到2
也就是说对于i++放进右值中时我们是先把i的值拿来为我们所用,我们使用后i再自增;
2:再来看看++i的问题
int i=1,j;
j=++i; //结果是2
-------------
int i=i;
i=++i; //结果是2
此时两个结果是一样的j为2,i也是2
对于++i而言我们是先将i自增随后我们再拿来进行我们的计算;
3来看看比较不好理解的代码(严重避免仿照以下代码写自己的代码)
int i=1,c=1,j;
j=(c++)+(c++);
i=(i++)+(i++);
cout<<j<<" "<<i<<endl;
先自己想想答案
~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~·
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
哈哈哈哈,知道你做错了让哥来拯救你吧!
首先看j,j的值最后是2,简单的解释就是j=1+1=2,而计算完j后c的值是3(不懂的话再看看第一条);
再看i,i最后等于4,i=1+1这里和之前的j是一样的,但是不要忘记i还有两次自增所以i为4;
不要以为 i是等于2+2,或者是1+3。首先这个1+3肯定是错的,因为在执行中间的加法之前两个括号中的东西在同一个内存中
至于2+2,就要说到操作符的优先级上了,我们先执行了加法后执行++运算;
再来看看
int i=1,c=1,j;
j=(++c)+(++c)+(++c);
i=(++i)+(++i)+(++i)+(++i)+(++i);
cout<<j<<" "<<i<<endl;
输出的结果是10 21
解析:j=3+3+4; i=3+3+4+5+6;
首先j的运算 :第一个++c之后c为2这时还没执行中间的加等第二个++c后c为3,执行中间的加法则此时为两个三相加
最后将得到的6放进临时变量,随后执行第三个++c,c为4,临时变量加上为4的c得到值为10的临时变量,最后将临时
变量赋值给j,i的推导过程一样;
如果还有什么不懂的可以评论,我会回复。