面试官:来!做下这个++i与i++的题

135 阅读2分钟

面试官:来!做下这个++i与i++的题

面试官:了解i++与++i的区别吗?

求职者:了解。。。

面试官:来,做下这几个题

情景一:

题目:

#include <iostream>

using namespace std;

int main()
{
    int j = 0;
    for(int i=0;i<10;i++)
    {
        j = (j++);
    }
    cout<<"j:"<<j<<endl;
    return 0;
}

这个题的输出应该是多少?

面试官:有答案了吗

求职者:这个答案是“0”

面试官:能讲讲为什么吗?

求职者:因为 j=j++ 是先将j的值(0)存入堆栈,然后对变量区中的j自加1,这 时j的值的确是1,但随后又将堆栈的值(0)弹出赋给变量区的j,所以 最后j=0;这个很类似与交换数据,但是只完成了前两步,最后一步赋 值没有完成;

情景二:

#include <iostream>

using namespace std;

int main()
{
    int j = 0;
    for(int i=0;i<10;i++)
    {
        j = (++j);
    }
    cout<<"j:"<<j<<endl;
    return 0;
}

这个结果又是多少?

求职者:这个结果是"10";

面试官:为什么?

求职者:与上面的j++不同,j=++j是先对变量区中的j自加1,然后再将变量区中j 的值(1)存入堆栈,然后将堆栈中的值(1)弹出赋给变量区的j,所 以j = ++j;的结果是j = 1;依次循环,最终结果是10;

情景三:

#include <iostream>

using namespace std;

int main()
{
    int j = 0;
    for(int i=0;i<10;i++)
    {
        j = ++j;
    }
    cout<<"j:"<<j<<endl;
    return 0;
}

面试官:那这个结果么?

求职者:(心想:难道这个和上面不一样,少了一个括号,难道是考验优先 级)++的优先级大于=的优先级,这个和上面的结果是一样的,都是 10;

面试官:嗯,不错,那我们开始下一话题吧。。。。

总结:有时候我们会忽略一部分细节,使用时间久了,变成了固定思维,按照套路去写代码,渐渐的遗忘了这么做的原因,我们平时一定要多想想这么做的意义,切勿失了本心!

想了解学习更多C++后台服务器方面的知识,请关注: 微信公众号:====CPP后台服务器开发====

本文使用 mdnice 排版