当前位置:编程学习 > C#/ASP.NET >>

你猜~~~C++初学者问题

int test=2;
test=test++;
cout<<test<<endl; 
最后输出时多少?请附带解释~~~ --------------------编程问答-------------------- 应该是2。

这段代码等价:
int test = 2;
int t = test;
test = t;
test = test + 1;
test = t; --------------------编程问答-------------------- 3

 mov         dword ptr [test],2 
 mov         eax,dword ptr [test] 
 mov         dword ptr [test],eax 
 mov         ecx,dword ptr [test] 
 add         ecx,1 
 mov         dword ptr [test],ecx 
--------------------编程问答-------------------- 输出结果是 3 --------------------编程问答-------------------- 是3
int test=2;
test=test++;(相当于test = 2)
cout<<test<<endl; (到了这里test++才执行完毕) --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
应该是2。

这段代码等价:
int test = 2;
int t = test;
test = t;
test = test + 1;
test = t;

答案确实是2,我用的是DEV-C编译器,学长说这是和编译器有关,换成其他编译器有可能是3 --------------------编程问答--------------------
引用 2 楼 wowufeng 的回复:
3

 mov         dword ptr [test],2 
 mov         eax,dword ptr [test] 
 mov         dword ptr [test],eax 
 mov         ecx,dword ptr [test] 
 add         ecx,1 
 mov         dword ……

为什么DEV-C编译是2呢? --------------------编程问答--------------------
引用 5 楼 kg_second 的回复:
引用 1 楼 devmiao 的回复:应该是2。

这段代码等价:
int test = 2;
int t = test;
test = t;
test = test + 1;
test = t;
答案确实是2,我用的是DEV-C编译器,学长说这是和编译器有关,换成其他编译器有可能是3

答案的说法错了,就是在DEV-C编译的结果是2~~ --------------------编程问答-------------------- 编译原理....... --------------------编程问答-------------------- 不同的编译器,实现是不一样的
--------------------编程问答-------------------- 我想应该是2吧 --------------------编程问答-------------------- 为什么用test=test++呢?
用test++不行吗? --------------------编程问答-------------------- 我感觉是2
++test才是3的吧 --------------------编程问答-------------------- 肯定是3的。

int test=2;//初始化为2
test=test++;//++操作是在一条语句结束后才执行的。相当于
<test = 2;
test++>

所以是3
  --------------------编程问答-------------------- 等价于
int test=2;
test=test;
test=test+1;
--------------------编程问答-------------------- 3
test = t++的时候
虽然 t++ 是后加
但是 他的优先级 高于 等于号 --------------------编程问答-------------------- 很明显test输出结果为了3。因为test=test++,先是test赋值给本身,然后再自加一嘛。 --------------------编程问答--------------------   int t;
  int test=2;
  t=test++;
  cout<<t<<endl;
 我那时想错了,这样输出才是2 --------------------编程问答-------------------- 如果不考虑编译器的差异,严格按照C++标准来分析的话,这个答案应该是2
理由是:
int test=2;
这时,test为2
test=test++;
这里,赋值操作符是右结合性,先计算右边。而后面是个后自增,其返回一个右值,具体是把test的当前值(即2)作为右值返回,test自增1,因此test为3.但是接下来进行了赋值操作,相当于test = 2 ,也就是又把test 为3重新赋值变为2了。因此,这一语句执行后,test为2.
cout<<test<<endl; 
--------------------编程问答-------------------- 试一下不就知道了,编译器不一样吧 --------------------编程问答-------------------- 3。第二行代码实际上就是test++;后者++test;
看起来很炫的样子,实际上我还真没见过有那个程序员会这么写代码的!!!!
--------------------编程问答-------------------- 3 test++ --------------------编程问答-------------------- 输出时test已经完成了++ --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 输出3
test=test++执行时,先执行test=test,后执行test++,最后test值为3。 --------------------编程问答-------------------- 打开所有警告,会提示:
warning: operation on 'test' may be undefined [-Wsequence-point]
表示这个操作的结果是未定义的,编译器可以以任何方便的方式来实现 --------------------编程问答-------------------- 3,
先使用test的值2赋值,
然后让test+1 --------------------编程问答-------------------- 看到这样的问题真心觉得蛋疼,因为写程序,做项目,要是出现这样的语句,估计被人批死,除非你写的程序只有自己看。
有个现在我一直纳闷,为什么这样的题目,在高校里那么多老师喜欢考?
类似的题目,&&,||的短路效果,写程序,用不上的东西却喜欢来考,国人的教育,令我无语,是要显摆你的高深还是? --------------------编程问答--------------------
引用 27 楼 fanrenyilove 的回复:
看到这样的问题真心觉得蛋疼,因为写程序,做项目,要是出现这样的语句,估计被人批死,除非你写的程序只有自己看。
有个现在我一直纳闷,为什么这样的题目,在高校里那么多老师喜欢考?
类似的题目,&&,||的短路效果,写程序,用不上的东西却喜欢来考,国人的教育,令我无语,是要显摆你的高深还是?


谁说用不上???你去看看开源项目那个不用? --------------------编程问答-------------------- 好像是3吧。。
原因就不说。。上面的童鞋说的很清楚了。 --------------------编程问答-------------------- 至少VC 编译出来是  3 --------------------编程问答-------------------- 这个问题居然还用问么?不管是先赋值还是先自加,都是要加的啊,肯定不是2对不。还有不管是是先++,还是后++,你又不是在自加的同一行输出,都换下一行了,这个还有先后顺序么?肯定是3啊 --------------------编程问答-------------------- 3

int test=2;
test=test;
test++;
cout<<test<<endl;  --------------------编程问答--------------------
引用 27 楼 fanrenyilove 的回复:
看到这样的问题真心觉得蛋疼,因为写程序,做项目,要是出现这样的语句,估计被人批死,除非你写的程序只有自己看。
有个现在我一直纳闷,为什么这样的题目,在高校里那么多老师喜欢考?
类似的题目,&&,||的短路效果,写程序,用不上的东西却喜欢来考,国人的教育,令我无语,是要显摆你的高深还是?


确实用得上——用代码检查它被哪个编译器编译的时候,我们经常利用编译器的BUG来判断。 --------------------编程问答-------------------- 刚刚用VC6.0测过是3
用Eclipse测结果是2 --------------------编程问答-------------------- 13楼是正解  --------------------编程问答-------------------- 这套程序流程应该是这样的吧:
int test = 2;
test = test;
test++;
cout<<test<<endl;
输出为3. --------------------编程问答-------------------- 我是来看答案的 --------------------编程问答-------------------- 又见大姨妈贴、不同的编译器会产生不同的结果 --------------------编程问答-------------------- 是3,test先赋给test(是2),再自加为3,正常思路是这样的,如果编译器给出了2,那这种编译器也是非主流的吧?
刚刚VC测试为3 --------------------编程问答-------------------- 就如同问1+1等于几,你把大家给镇住了。

根据我们的常识这肯定是3的。 --------------------编程问答-------------------- 先定义的test=2;
然后test=test++;
test先把test值2传给test,输出。然后test自己再加1,就是三了。
所以最后输出的应该是2. --------------------编程问答-------------------- 蛋疼的问题,输出看编译器了 --------------------编程问答-------------------- 这是个赋值操作和++操作的优先级问题吧 --------------------编程问答-------------------- 真无聊,楼主是要去考计算机二级么?

不是写这种代码干嘛,多加括号又不会死。
编码不是为了纠结这些玩意的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 3
不管怎么说,cout之前都执行了++操作 --------------------编程问答-------------------- 3啊,test开始等于2,++以后等于3啊 --------------------编程问答-------------------- 看一下讨论挺有趣的。 --------------------编程问答-------------------- 未定义行为,完全取决于编译器,没必要去讨论 --------------------编程问答-------------------- --------------------编程问答-------------------- 应该是3
test=test++;这一句执行完后再执行++操作
即是先将2赋给test,再自加1
输出3 --------------------编程问答-------------------- 3
--------------------编程问答-------------------- 这样的讨论真的没有意义。

如果你知道test = test+1等于多少,同时你知道++操作符和=的优先级关系,你就知道答案是多少了。

我这的搞不明白现实中有这样的写法吗?写出一条很炫的、带有歧义的、让别人思考嘀咕半天代码的developer不是一个好的程序员。毕竟越简单的代码出错的概率就越低。 --------------------编程问答-------------------- 3没错滴~~~ --------------------编程问答-------------------- 2吧,这就相当于j=i++,然后把2赋值给j以后,i自加。j=2,i=3。不过这里面i和j的优先级真的不明白,就是两个test会先输出哪个。。。。坐等大牛。。 --------------------编程问答-------------------- vs2010 编译显示结果为:3 --------------------编程问答-------------------- 写出这种程序是没有意义的,除非就是纯粹为了考验人的。。。 --------------------编程问答-------------------- 不知道哪种编译器编译出来等于2, 第二行代码给test赋值2了之后,执行了自增1,
结果输出为3猜对 --------------------编程问答-------------------- ++运算符的优先级大于=运算符,应该先++,test=3,正常来说应该是3 --------------------编程问答-------------------- 准备考二级?加油。 --------------------编程问答-------------------- 如果 test 是 自己定义的类的话,结果是2 --------------------编程问答--------------------
引用 13 楼 hlfkyo 的回复:
肯定是3的。

int test=2;//初始化为2
test=test++;//++操作是在一条语句结束后才执行的。相当于
<test = 2;
test++>

所以是3
 
是3
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,