如何用++ i计算结果是14,15,12?
作者&投稿:浑宰 (若有异议请与网页底部的电邮联系)
计算结果为:14,15,12。
首选我们要搞清楚:++ i 是先加后赋值,i ++ 是先赋值后加。++i和i++都是分两步完成的。
比如
a=i++;
先将i的值赋予给a,然后i再进行自增操作,变成i+1。
b=++i;
i先进行自增操作,变成i+1。然后再将这个值传给b。
按照从左到右的计算顺序,下图标出了每个小括号的计算结果,就能得出最后的值:
扩展程序:
i++ 不能作为左值,而++i 可以。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
参考资料:自增自减运算符-百度百科
雍翔泰尔: 编译器原理:由左到右运算,先计算(++i)+(++i) ,由于括号的优先,所以i自加后再相加,此时i=5;等于(5)+(5)=10;10+(++i)=10+6=16
思茅区19671785245: int i=3;k=(i++)+(++i)+(i++);求k,i的值 - ?
雍翔泰尔: int i=3;k=(++i)+(++i)+(i++); k=15,i=6; int i=3;k=(++i)+(++i)+(++i); k=18,i=6 int i=3;k=(i++)+(i++)+(i++); k=9,i=6i=6不管哪种,i都是加了三次,由3到最后的6 主要区别在于i++是先运算,后执行i=i+1 ++i是先执行i=i+1,后运算 所以第一个先执行了两...
思茅区19671785245: (++i)+(i++)+(++i)怎么算 - ?
雍翔泰尔: 假设I=1; 现运行(++I),在运算前I先加1,所以这个结果就是2, 再看第二个(I++),经过上面的运算后,I这时候已经变成2,先运算后自加,这个结果为2,I=3, 下面(++I),先自加后运算,所以结果为4,最后把这三个表达式加起来,2+3+4=9;可以自己编写一个简单的程序试试
思茅区19671785245: 为什么在 C 语言中,i=1;i=(++i)+(++i)+(++i)+(++i); 得到 i 的结果是 15 而不是 14 ??
雍翔泰尔: 1、这种写法,是C标准严格禁止的.和伸手摸电门一样,写这种代码属于做死. 2、关于这种写法的结果的一切讨论,都是无意义的. 这在c标准里,叫做未定义行为. (当 然,我得说,这个术语实在糟糕,可能翻译成“不定义”反而更能反...
思茅区19671785245: c语言,++i求解. - ?
雍翔泰尔: 此题解题的关键,是要明确: C语言中,加法运算之间,是左结合的.也就是说,多个加号接连出现时,先算最左边的加号,得到结果,再将结果与右侧的下一个加号后的表达式进行运算.---------------------------- 第一题 ......{int i=3;i=i+(++i);printf(...
思茅区19671785245: 设整型变量i值为2,表达式(++i)+(++i)+(++i)的结果是( ). A. 6 B. 12 C. 15 - ?
雍翔泰尔: 选B,第一个++i得3,此时i变为3,所以第二个++i得4,此时i变为4,所以第三个++i得5,最后3+4+5=12
思茅区19671785245: C语言表达式(++i)+(++i)+(++i)结果多少? - ?
雍翔泰尔: 结果为16,说明用的编译环境是VC++6.0,如用TC环境,则结果为18.VC环境下,对于前增减运算(++i),自增自减是按从左到右扫描顺序,以一个运算符两边涉及前自增减的两个运算对象为单位进行之前增减的;对于后增减运算(i++),...
思茅区19671785245: C语言问题,关于printf函数打印结果与++i和i++的问题,详细问题如下. - ?
雍翔泰尔: 结果正确 第一个10是因为++是在在指令结束后才真正实现的 第二个14是因为该指令中是从右向左执行的,执行最右边的++后i已经为12了,所以右边两个位12,继续向左执行的话就为13、14 最后为15是因为在第二个指令结束后才执行的i++指令使i值为15的
思茅区19671785245: C++真题中 int main() { int i=17; while(i>10) { if( - i%4==3)continue; else cout<<"i="<<i--<<endl }_?
雍翔泰尔: 第一个循环:先看--i%4==3,这里面的--I应该是先先减一后使用,i=17时,--i ,i=16,16%4==3假,i--,此时是先用后减一,i=16,结果输出16,然后减一,i=15,进入第二个循环.第二个循环:先看--i%4==3,i=15,--i,i=14,14%4==3假,和循环一相同,输出14,一直到第四个循环,i=11进入的,计算完i=10了,输出10
思茅区19671785245: 关于i++和++i的计算 - ?
雍翔泰尔: 的确,i++就是语句执行完毕以后补做一个i=i+1的赋值,++i就是在语句执行之前执行一个i=i+1语句. i++结果为3,之后加1,i为4 ++i在4的基础上加1,结果为5, ++i用5加1,结果为6; ++i用6加1,结果为7; i++首先不做运算,结果为7; 3+5+6+7+7=28.