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

#include<stdio.h>voidmain(){inti=8;printf("%d\n",++i);//printf("%d\n",--i);//printf("... #include<stdio.h> void main() { int i=8; printf("%d\n",++i);// printf("%d\n",--i);// printf("%d\n",i++);// printf("%d\n",i--);// printf("%d\n",-i++);// printf("%d\n",-i--);// } 输出结果为 9 8 8 9 -8 -9 求分析 展开
 我来答
兔老大米奇
高粉答主

2019-12-17 · 醉心答题,欢迎关注
知道小有建树答主
回答量:988
采纳率:100%
帮助的人:13.9万
展开全部

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

百度网友331a319
高粉答主

2019-12-30 · 每个回答都超有意思的
知道答主
回答量:408
采纳率:100%
帮助的人:5.6万
展开全部

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虫心菜
高粉答主

2018-11-29 · 每个回答都超有意思的
知道答主
回答量:23
采纳率:0%
帮助的人:9948
展开全部

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。

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蹄子0602
推荐于2017-09-07 · TA获得超过175个赞
知道答主
回答量:112
采纳率:0%
帮助的人:141万
展开全部
++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 }
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
锺离毅君蓟瑶
2020-05-02 · TA获得超过2.9万个赞
知道小有建树答主
回答量:1.1万
采纳率:35%
帮助的人:613万
展开全部
因为i++的意思是i在使用过后+1,座椅执行完第二条语句之后i就变成3了。
++i是在使用前+1,那么结果就会变成b=3
i=3了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式