注册 登录
编程论坛 C++教室

求助:一段代码看不懂

ustcsse 发布于 2014-01-23 20:19, 15350 次点击
第一段:
程序代码:
#include <iostream>
using namespace std;
int main()
{
    int a,x;
    for(a = 0,x=0;a<=1 &&!x++;a++)
    {
        a++;
    }
    cout << a << x << endl;
    return 0;
}
第二段
程序代码:
#include <iostream>
using namespace std;
int main()
{
    int a,x;
    for(a = 0,x=0;a<=1 &&!x++;)
    {
        a++;
    }
    cout << a << x << endl;
    return 0;
}
第一段:初始化定义a=0,x=0;a小于等于1,x的非为1;符合循环条件,x++后x增为1,进入循环体a++,a自增为1,然后再执行循环体的a++,a就变成2了。然后a = 2;x = 1;
第二段:初始化定义a=0,x=0;a小于等于1,x的非为1;符合循环条件,x++后x增为1,然后执行循环体里面的a++,a就变成了1,接下来书里说a=1满足执行条件,所以&&后面的!x++被执行,!x=0,所以不执行循环体,但是x++依然执行,自增为2.我主要是第二段代码中关于x++部分的第二次循环不理解。请高手指教!这是程序猿面试宝典上面的题目,觉得自己看书看的好不认真,,
7 回复
#2
rjsp2014-01-24 09:12
有什么不理解的嘛,!x++ 就是 !(x++)
不管!x值如何,x都会++

a && b 中 a表达式的值 绝对是否执行 b,但无论如何a本身是会被执行的
for( ; a; ) b 中 a表达式的值 绝对是否执行 b,但无论如何a本身是会被执行的
#3
蚕头燕尾2014-01-24 21:52
话说这个贴的人气如何这么高。。。

楼主理解了么?

#4
fl89622014-01-25 04:53
回复 楼主 ustcsse
#include <iostream>
using namespace std;         
int main()
{
    int a,x;
    for(a = 0,x=0;a<=1 &&!x++;a++)/
    {
        a++;
    }
    cout << a << x << endl;
    return 0;
}
//a,x 先赋值为0,条件满足,执行a++,然后a变成了1,然后再执行一次a++,所以a变成了2
#include <iostream>
using namespace std;
int main()
{
    int a,x;
    for(a = 0,x=0;a<=1 &&!x++;)
    {
        a++;
    }
    cout << a << x << endl;
    return 0;
}
//a,x在这个for循环中初始为0,!x++(x在这个语句中先执行运算,再自增)for循环中的条件第一次满足,并且x自增为1,然后a自增为1,然后又进入条件判断语句,
因为a满足小于等于1的条件,!x++(x先执行运算,再自增),第二次运算条件没满足,但是X仍旧加1变为2.
我是这么理解的,上机测试结果也是对的。
意见供楼主参考,楼主可以多亲自动手测试,好处很多哦。。
#5
ustcsse2014-01-25 18:23
回复 4楼 fl8962
我上级测试了一下,只是刚开始不知道不执行循环还执行x++,就是这一点有不懂,新手,谢谢你对我的指导!
#6
ustcsse2014-01-25 18:23
回复 3楼 蚕头燕尾
理解了,可能因为我名字开头四个字。。
#7
ustcsse2014-01-25 18:23
回复 2楼 rjsp
理解了 谢谢你对我的帮助
#8
fl89622014-01-26 17:29
回复 5楼 ustcsse
打了那么多字的面子上,兄弟你就给我分吧。。。
1