栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

i++与++i的区别:通俗易懂的讲述他们的区别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

i++与++i的区别:通俗易懂的讲述他们的区别

最近有一位朋友问我一道题,题目是这样的:

假设所有变量均为整型,则表达式(x=2,y=5,y++,x+y)的值是( )

A. 7                     B. 8                        C.9                        D. 2

很多人不明白一个问题,因为很多人(包括老师)是这样描述的:

i++是先赋值,然后再自增;++i是先自增,后赋值

这就会产生一个小小的误区。在这个式子中,表达式y++,是在这个语句中就+1呢,还是说下一个语句中再+1?

这题的答案是8,选B。

究其原因,我觉得可以这样理解:

编程中的表达式一般情况是会有返回值的,i++与++i也不例外。

如:

int y = 3 + 2;

就可以把 3 + 2 看作表达式,计算结果赋值给 y。

同理,我们就可以理解为:

i++与++i都能将变量i自增1,但是在此之前:

i++ 表达式在自增的同时,返回值为 i 

++i 表达式在自增的同时,返回值为 i+1

这两句话非常重要,如果用这个结论再看其它的题目时,发现毫无难度!

如:

int a = 1;
int b;
b = a++;
// b 为 1

由于a++的返回值是a,赋值给了b。所有b的值是此时a的值。

如:

int a = 1;
int b;
b = ++a;
// b 为 2

由于a++的返回值是a+1,赋值给了b。所有b的值是此时a+1的值。

在输出也一样,如:

int a = 1;
printf("%dn",a++);
// 输出1

由于a++是 printf 函数的参数,所以输出的是 a++表达式 的返回值,也就是a

如:

int a = 1;
printf("%dn",++a);
// 输出2

由于++a是 printf 函数的参数,所以输出的是 ++a表达式 的返回值,也就是a+1

当然,如果没有人使用到他们的返回值的时候,他们的效果完全相同:

如:

int a = 1;
a++;

和

int a = 1;
++a;

现在再看看刚开始的那道题:

假设所有变量均为整型,则表达式(x=2,y=5,y++,x+y)的值是( )

A. 7                     B. 8                        C.9                        D. 2

可以看作 y++ 在表达式中但是没有人使用到他的返回值。

所以此刻 y++ 与 ++y 是完全相同的,它仅仅做了 y+=1 的操作罢了!

毫无疑问,这题 2 + 6 = 8 !

我还用C语言的函数模拟了一下 i++ 和 ++i 内部的操作:

int iPlusPlus(int * i){
    *i = *i + 1;
    return *i;
}


int plusPlusI(int * i){
    *i = *i + 1;
    return *i+1;
}

创作不易,喜欢的话给个赞趴!有错误也欢迎在评论区指出奥!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号