++i、--i和i++、i--的区别理解

发布网友 发布时间:2022-04-22 03:44

我来回答

5个回答

热心网友 时间:2024-07-16 16:20

++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。

热心网友 时间:2024-07-16 16:20

++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。

热心网友 时间:2024-07-16 16:21

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。

参考资料来源:百度百科-自增自减运算符

参考资料来源:百度百科-++

热心网友 时间:2024-07-16 16:21

++i 先执行i+1后执行程序 i++ 先执行程序后执行i+1 int i=8; printf("%d\n",++i);//先执行加法 所以打印出来的是9 printf("%d\n",--i);//先执行减法 打印出来是8 printf("%d\n",i++);//先执行程序 打印出来是8 打印结束后i为9 printf("%d\n",i--);//先执行程序 打印出来是9 打印结束后i为8 printf("%d\n",-i++);//先执行程序 打印出来是-8 打印结束后i为9 printf("%d\n",-i--);//先执行程序 打印出来是-9 打印结束后i为8 }

热心网友 时间:2024-07-16 16:22

因为i++的意思是i在使用过后+1,座椅执行完第二条语句之后i就变成3了。
++i是在使用前+1,那么结果就会变成b=3
i=3了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com