++i、--i和i++、i--的区别理解
++i、--i和i++、i--的区别:
1、执行时间先后顺序不同。
++i 先执行i+1后执行程序 i++ 先执行程序后执行i+1 int i=8; printf("%d\n",++i),先执行加法所以打印出来的是9 printf("%d\n",--i)。
2、执行减法的先后程序不同。
先执行减法 打印出来是8 printf("%d\n",i++)。先执行程序 打印出来是8 打印结束后i为99printf("%d\n",i--)。
3、执行程序结果先后不同。
打印出来是9 打印结束后i为8 printf("%d\n",-i++),先执行程序 打印出来是-8 打印结束后i为9 printf("%d\n",-i--)。先执行程序 打印出来是-9 打印结束后i为8 }。
扩展资料
在同一条语句中,被操作的数出现多次是可以通过编译的,但是其在C++ Standard等语言标准中被定义为"Undefined behavior"(不确定的行为),即不同的编译器或编译器版本所编译得到的机器码可能不尽相同。
不在同一条语句中使被操作的数出现多次,这不仅仅将导致程序的含义难以理解,可读性大幅降低,同时可能导致不同的编译器或编译器版本得到不同的结果。
前置后置区别的举例: a = i++; 相当于 a = i; i++; a = ++i; 相当于 i++; a = i。
++i、--i和i++、i--的区别:
1、执行时间不同。
++ i先执行i +1,然后执行程序i ++先执行程序,然后执行i +1 int i = 8; printf(“%d \ n”,++ i)首先执行加法,因此打印输出为9 printf(“%d \ n”,-i)。
2、进行减法的顺序不同。
首先执行减法,打印输出为8 printf(“%d \ n”,i ++), 首先执行程序。 打印输出为8。打印完成后,i为99printf(“%d \ n”,i--)。
3、执行程序的结果不同。
打印后打印为9, 是8 printf(“%d \ n”,-i ++), 如果首先执行程序,则打印输出为-8。 打印完成后,i为9 printf(“%d \ n”,-i--)。 首先运行程序, 打印输出为-9,打印后,是8}。
扩展资料:
在同一条语句中,操作数可以被编译多次,但是在诸如C ++标准之类的语言标准中,操作数被定义为“未定义的行为”,即,不同的编译器或不同版本的计算机代码可能会有所不同。
不要使操作数在同一条语句中出现多次,这不仅会使程序的含义难以理解,大大降低了可读性,而且还可能导致不同的编译器或编译器版本获得不同的结果。
前置后置区别的举例: a = i++; 相当于 a = i; i++; a = ++i; 相当于 i++; a = i。
i++和++i命令的区别有:
1、赋值顺序不同
++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。
因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。
形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
2、效率不同
比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。
3、 i++ 不能作为左值,而++i 可以。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
比如:
int i = 0;
int *p1 = &(++i);//正确
int *p2 = &(i++);//错误
++i = 1;//正确
i++ = 1;//错误
扩展资料:
当i=5时,s=(++i)+(++i)和s=(i++)+(i++)的值:
1、当i=5时,s=(++i)+(++i)=13 先算第一个(++i),++在前面,就把i先加1再把赋值,即先把i变为6然后再得出(++i)的值为6,这时i已经变为6了,
再计算第二个(++i),++在前面也是先把i加1后再赋值,不过这时的i已经为6了,第一步的时候把i变成6了的,然后加1的话就变成7了,所以第二个(++i)的值为7,s=(++i)+(++i)=6+7=13。
2、s=(i++)+(i++)=11 先算第一个(i++),i在前面,就先赋值再把i加1,即(i++)的值为5,i的值变为6,第二个(i++),i在前面,先赋值再把i加1,这个时候的i已经为6了,即(i++)的值为6,而i已经变为7了。所以s=(i++)+(i++)=5+6=11。
参考资料来源:百度百科-自增自减运算符
参考资料来源:百度百科-++
++i是在使用前+1,那么结果就会变成b=3
i=3了。