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

结论

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本身,是可以取地址的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值