c++中i++和++i的区别

发布于:2023-08-27 ⋅ 阅读:(57) ⋅ 点赞:(0)

结论

1. i++ 是两步操作,第一步:a = i    第二步:i = i+1,最终返回a,但a是不具名的,也无法取地址

2. ++i 也是两步操作,第一步:i = i+1    第二步:return i,最终返回也就是i本身,所以可以取地址

3. 基于结论1、结论2,现在你知道为什么i++++会编译报错,而++++i能执行成功了吧,道理很简单,i++返回的是i的旧值,不具名,也无法取地址,只能作为右值。i++++是对一个没有地址的变量进行++操作,完全没法执行嘛

4. 只要知道i++返回是i的旧值,++i返回是i的新值就行了。谁要是问你为什么 ++i++ 会编译报错,而 (++i)++ 能执行成功的话,你就扇他吧

实验1(测试i++的结果是否是具名的,能否取地址)

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int i = 1;
    cout<<"i.p="<<&i<<endl;
    cout<<"i++.p="<<&(i++)<<endl;
}

结果如下,直接编译错误,提示需要左值,如下图

也就是说 "i++" 不是左值,也验证了我们第一条结论,i++的结果是不具名的,也无法取地址

实验2(证明i++的结果不是左值,也无法赋值)

int main()

{

    int i = 1;

    i++ = 10;

}

编译时报错如下,明确提示赋值操作的左侧需要左值

实验3(测试++i的结果是否是具名的,能否取地址)

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int i = 1;
    cout<<"i.p="<<&i<<endl;
    cout<<"++i.p="<<&(++i)<<endl;
}

 结果如下,成功打印出了++i的地址,且和i的地址一样,也就验证了第二条结论,++i返回是i本身,是可以取地址的


网站公告

今日签到

点亮在社区的每一天
去签到