黑马程序员技术交流社区

标题: int i;i的默认值问题求解? [打印本页]

作者: 雪寒    时间: 2014-11-3 15:22
标题: int i;i的默认值问题求解?
以前学习的时候,好像int型的变量,在未赋初值的时候,i 的值默认为0,但是在C编程的时候,却不是这样
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int i;
  5.         i=i+1;
  6.         printf("%d",i);
  7.         return 0;
  8. }
复制代码

运行的结果是:-858993459

这是怎么回事呢?



作者: 枫叶路过123    时间: 2014-11-3 15:28
变量i没有初始化,就使用
作者: 雪寒    时间: 2014-11-3 15:33
枫叶路过123 发表于 2014-11-3 15:28
变量i没有初始化,就使用

嗯,这个我知道,int型应该有默认值0

我这样写就没错

  1. #include <stdio.h>
  2. int i;
  3. int main()
  4. {       
  5.     i=i+1;
  6.     printf("%d",i);
  7. }
复制代码

作者: 冯立柱    时间: 2014-11-3 15:48
在C语言中,变量未经初始化,默认值并不是0。在应用变量之前,一定要进行初始化。
作者: 雪寒    时间: 2014-11-3 15:58
冯立柱 发表于 2014-11-3 15:48
在C语言中,变量未经初始化,默认值并不是0。在应用变量之前,一定要进行初始化。 ...

可是,如果把它定义为全局变量,就可以,int型默认值为0,运算结果也是正确的
作者: 银河雨    时间: 2014-11-3 16:07
没有初始化的话,变量所在内存空间的内容是没有改变的,以前存的什么就是什么,所以可能什么古怪的东西都会被打印出来。这个更体现了初始化的重要性。自己初始化一下才比较放心。
作者: 冯立柱    时间: 2014-11-3 16:08
雪寒 发表于 2014-11-3 15:58
可是,如果把它定义为全局变量,就可以,int型默认值为0,运算结果也是正确的 ...

不好意思,没说清楚,回答太片面了。确实,在变量定义为全局变量时,C语言给定义为默认初始值为0,我之前说的只适用于局部变量。
作者: 雪寒    时间: 2014-11-3 16:11
冯立柱 发表于 2014-11-3 16:08
不好意思,没说清楚,回答太片面了。确实,在变量定义为全局变量时,C语言给定义为默认初始值为0,我之前 ...

嗯,我也是后来才发现的。。。
作者: 雪寒    时间: 2014-11-3 16:13
银河雨 发表于 2014-11-3 16:07
没有初始化的话,变量所在内存空间的内容是没有改变的,以前存的什么就是什么,所以可能什么古怪的东西都会 ...

嗯,如果是全局变量,就有了默认值。。。
作者: 银河雨    时间: 2014-11-3 16:16
雪寒 发表于 2014-11-3 16:13
嗯,如果是全局变量,就有了默认值。。。

是的。而且一般局部变量用得比较多。
作者: 银河雨    时间: 2014-11-3 16:18
雪寒 发表于 2014-11-3 16:13
嗯,如果是全局变量,就有了默认值。。。

是的。而且一般局部变量用得比较多。
作者: 大米米    时间: 2014-11-4 11:24
还是初始化后再用吧
作者: 轮回    时间: 2014-11-4 12:33
在c语言中,变量使用之前需要进行初始化,将内存中得垃圾数据清空,这样就不会取到垃圾数据了。

作者: 万雷    时间: 2014-11-4 12:48
初始化  在使用   要不就定义成全局变量
作者: 易拉罐    时间: 2014-11-4 13:34
最好就是在使用变量之前先初始化。。
作者: 雪寒    时间: 2014-11-4 23:04
轮回 发表于 2014-11-4 12:33
在c语言中,变量使用之前需要进行初始化,将内存中得垃圾数据清空,这样就不会取到垃圾数据了。
...

有道理……
作者: caozhichao    时间: 2014-11-5 08:13
原来还会这样的




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