面试官:来!做下这个++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 排版