黑马程序员技术交流社区

标题: int a=1;int b=(a++)+5*a;b的结果? [打印本页]

作者: 李明    时间: 2011-12-11 13:53
标题: int a=1;int b=(a++)+5*a;b的结果?
本帖最后由 李明 于 2011-12-12 13:28 编辑

                int a=1;
                int b=(a++)+5*a;
                怎么解释结果是11?
作者: 唐秀启    时间: 2011-12-11 14:00
本帖最后由 benbenqi 于 2011-12-11 14:07 编辑

对不起,少打了点。


int b=(a++)+5*a
其实步骤是这样的
b=a;
a=a+1;;
b=b+5*a;
作者: 李明    时间: 2011-12-11 14:03
benbenqi 发表于 2011-12-11 14:00
int b=(a++)+5*a
其实步骤是这样的
b=a;

你这个结果是10啊,但是运行结果是11
作者: 唐秀启    时间: 2011-12-11 14:06
李明 发表于 2011-12-11 14:03
你这个结果是10啊,但是运行结果是11

失误失误 少打了

最后应该是
b=b+a*5
作者: 程传鹏    时间: 2011-12-11 14:17
    int a=1;
                int b=(a++)+5*a;
                怎么解释结果是11?
解释下
  首先a++表示的意思是,先取数据a然后再对a进行数值加1
        ++a表示的意思是,先对数据a进行数值加1然后再取数据a
  那么,再看该表示式
    b=(a++){这时,先取数值a=1,然后对a进行数值加1,这时a=2}+5*a{这时a=2},所以结果为11,
楼主可以试下把5*a改成a++和++a分别试试,看看结果如何,然后自己分析下就会明白了

作者: zoufan7410    时间: 2011-12-11 19:40
int b=(a++)+5*a;
因为有()这个括号,这说明要先进行++运算,如果要是没有这个括号就是进行赋值运算后,a的值再++,但现在有括号就要先算a++,此时a的值就是2了,再进行2+5*2就等于11了,再把11赋值给b.
作者: 周胜    时间: 2011-12-11 19:45
a++先取出a的值参加运算为1,然后a自加1为2,后面5*a=10;加上前面的1为11.
要是变成++a就是12.。一个是先参加运算再自加,后一个是先自加后参加运算
作者: 黄达标    时间: 2011-12-11 21:01
(a++)+5*a;按照顺序一步一步来
首先,a的值是1,参与上式运算的第一个a的的值就是1,不用管后面的自加,因为没有执行到这一步
然后,a自加,这时候内存中a的值才变成2,程序继续向下执行,所以后面的a的值是2
最后,就是1+5*2=11
作者: 冯敏    时间: 2011-12-11 22:08
a++:先引用后自加
++a:先自加后引用

int a=1;
int b=(a++)+5*a;
引用完a后,a的值会加1,所以5*a = 5*2

如果int c=(++a)+5*a,结果就是12




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2