黑马程序员技术交流社区

标题: 我是小白,帮忙看一下这个程序 [打印本页]

作者: 卞卞    时间: 2015-11-22 19:34
标题: 我是小白,帮忙看一下这个程序

这个程序的输出结果是什么,帮忙分析一下。

main()

{int i=1

   printf("%d",i++);

   {int i=0;

    printf("%d",i++);

      }

    printf("%d,i++);

     }



作者: 一个人走天下    时间: 2015-11-22 21:28
哥们,没报错嘛?在说你要输出那个啊

作者: qq892384796    时间: 2015-11-22 22:17
本帖最后由 qq892384796 于 2015-11-22 22:21 编辑

楼主,你这段代码应该属于C语言代码,在Java中是不允许的,即便把所有函数替换为Java的格式,中间的那个大括号{}也就是普通代码块中,重新定义int i=0;Java语法是不支持的,会报该变量名已存在,不可以在重复定义i变量。
站在C语言的角度来看这道题主要考的是i++先运算再加加的特点,以及普通代码块变量的访问区域(就近原则)这两点。

最后的结果是 :1 0 2
程序从上往下以此看输出语句:
  1.第一个printf()打印i,i是后++运算,所以先打印1 ,后自增为2
  2.第二个printf()同int i=0;一样被一个普通代码块所包含,也就是说在该代码块中使用的i都是内部的i,与代码块外部的i无关(就近原则),所以此处也是后++,打印0,后内部i自增为1
  3.第三个printf()所打印的i,楼主要明白普通代码块中所定义的变量,外部是访问不到的,所以此处的i是1处运算后的i,既然也是后++,即结果为先打印2,再自增。


作者: yaoyeqing    时间: 2015-11-22 22:48
赞赞赞赞
作者: zypt0218    时间: 2015-11-22 22:51
这个东西真没看懂
作者: 卞卞    时间: 2015-11-22 22:56
qq892384796 发表于 2015-11-22 22:17
楼主,你这段代码应该属于C语言代码,在Java中是不允许的,即便把所有函数替换为Java的格式,中间的那个大 ...

嗯对的,给你一个赞,谢谢
作者: Camwly    时间: 2015-11-22 22:56
102,注意变量生命期就行了。
作者: 卞卞    时间: 2015-11-22 23:00
感觉论坛好多大神啊
作者: 隔壁马良    时间: 2015-11-22 23:07
格式排列好一点会简单很多,这样吓着人了
作者: 卞卞    时间: 2015-11-22 23:26
隔壁马良 发表于 2015-11-22 23:07
格式排列好一点会简单很多,这样吓着人了

哦,不好意思我的错
作者: u37kl    时间: 2016-2-2 15:39
代码块之间使用栈保存,变量的调用永远优先使用栈顶的空间定义的同名的变量,首先是mian函数进栈,所以第一个输出结果为1,然后是代码块进栈,所以第二个输出结果为0;然后代码块出栈,栈中只剩下mian函数,所以输出结果为2
作者: 847374032    时间: 2016-2-3 17:52
102  ++在后面是赋值以后才加1的
作者: 泥娃娃    时间: 2016-3-17 09:57
同意一楼回复,这道题考查两个知识点,自增自减运算和普通代码块变量的作用域的考查。




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