Mocode 2020-03-25 21:18 采纳率: 100%
浏览 220
已结题

C++中的i++与++i的区别的理解问题?

C++教材有这样一道课后练习,通过观察两个人逐年的年龄变化让读者理解i++与++i的区别。练习题源代码如下:

#include<iostream>
using namespace std;
int main()
{
    int myAge=39;
    int yourAge=39;
    cout<<"I am: "<<myAge<<"years old."<<endl;
    cout<<"You are: "<<yourAge<<"years old."<<endl;
    myAge++;
    ++yourAge;
    cout<<"One year passes..."<<endl;
    cout<<"I am: "<<myAge<<"years old."<<endl;
    cout<<"You are: "<<yourAge<<"years old."<<endl;
    myAge++;
    ++yourAge;
    cout<<"Another year passes..."<<endl;
    cout<<"I am: "<<myAge++<<"years old."<<endl;
    cout<<"You are: "<<++yourAge<<"years old."<<endl;
    cout<<"Let's print it again."<<endl;
    cout<<"I am: "<<myAge<<"years old."<<endl;
    cout<<"You are: "<<yourAge<<"years old."<<endl;
    return 0;
}

如果是我自己手动算,最终的结果是如下:

I am: 39years old.
You are: 39years old.
One year passes...
I am: 40years old.
You are: 40years old.
Another year passes..
I am: 40years old.
You are: 41years old.
Let's print it again.
I am: 41years old.
You are: 41years old.

但是用dev编译器得到的运行结果如下:

I am: 39years old.
You are: 39years old.
One year passes...
I am: 40years old.
You are: 40years old.
Another year passes..
I am: 41years old.
You are: 42years old.
Let's print it again.
I am: 42years old.
You are: 42years old.

教材中有两句话是这样说的:

int i=1;
cout<<i++;           //首先使i自增为2,然后输出i自增前的值1
cout<<++i;           //首先使i自增为2,然后输出i的当前值2

请问是哪里出问题了呢?编译器会不会出错?(之前学C的时候就听说过不同编译器对自增自减这类运算有不同的运行结果)答案应该是什么样的呢?

  • 写回答

2条回答 默认 最新

  • Italink 2020-03-26 08:29
    关注

    前++,后++都是运算符,运算符说到底,就是一个函数,函数的功能具体要看实现,但大多时候有这样的约定,比如C/C++已经实现的这些操作(int和指针的++操作),i++一般是返回i自增前的值,++i是返回自增后的值,刚开始不懂你可以记一下,谁在左边,就先返回谁

    你可以用下面的代码测试一下

    #include <iostream>
    using namespace std;
    int pre(int& i) {       //i++;
        int t = i;
        //return post(i);
        i = i + 1;
        return t;       //返回增加前的值
    }
    int post( int& i) { //++i
        i = i + 1;
        return i;
    }
    int main() {
        int a = 1, b = 1;
        cout << a++ << pre(b) << endl;
        cout << ++a << post(b) << endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月1日
  • 已采纳回答 2月1日