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
#include
using namespace std;
int main()
{
    int i = 1;
    cout<<"i.p="<<&i<c++中i++和++i的区别_第1张图片

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

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

int main()

{

    int i = 1;

    i++ = 10;

}

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

c++中i++和++i的区别_第2张图片

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

#include
#include
using namespace std;
int main()
{
    int i = 1;
    cout<<"i.p="<<&i<c++中i++和++i的区别_第3张图片

你可能感兴趣的:(知识积累,i++和++i,i++和++i的区别)