2 wang2046783134 wang2046783134 于 2017.01.15 22:58 提问

C初始化数组有些不清楚

自己作死,看到java初始化数组过程中说道:

int[] a = new int[5]; //分配了长度是5的数组,但是没有赋值

没有赋值,那么就会使用默认值

作为int类型的数组,默认值是0

就这个问题纠结了好半天,C如果只声明不初始化会怎么样呢?

于是:

 int main(void)
{
   int a[5];
   int i;
   for(i=0;i<5;i++)
   {
      printf("-->%d\n",a[i]);
   }    
}

结果输出:

-->3

-->0

-->38

-->0

-->0

这是怎么回事?不会自动初始化为0吗?

求大神解答

8个回答

qq_29594393
qq_29594393   Ds   Rxr 2017.01.15 23:28
已采纳

c语言分配的是一串连续的地址 。地址中存储的是什么是不确定的。而且可以随意越界,访问其他地址,但是java 是做了一层封装的,不能越界,访问的不是计算机的内存地址。和C的数组实现完全是两码事,不能相同对待。

a15129095654
a15129095654   2017.01.15 23:23

C语言未初始化数组的话,出来的是不确定值,任意值

wang2046783134
wang2046783134 我搜了一下,编译器不同,处理也不同,有的编译器自动初始化为0,有的分配在堆中,所以读取的是垃圾值,C最好手动初始化,这是我搜到的答案,还是谢谢你了
11 个月之前 回复
a15129095654
a15129095654   2017.01.15 23:29

补充一下,全局变量默认值是0,局部变量未初始化的话就是不定值或者乱码之类的

lhf774962063
lhf774962063   2017.01.15 23:14

你再打印一次试试,试试看是不是每一次都一样

wang2046783134
wang2046783134 回复当作看不见: 重新开一个会变化,嗯,对的
11 个月之前 回复
qq_29594393
qq_29594393 回复wang2046783134: 你要重新开一个项目 ,再次分配。
11 个月之前 回复
wang2046783134
wang2046783134 3 0 40 0 0,是怎么回事?C如果只声明,没有初始化就指针乱读吗?
11 个月之前 回复
wang2046783134
wang2046783134 重新试了一次,变化了,3 0 37 0 0,怎么回事?
11 个月之前 回复
wang2046783134
wang2046783134 所以才奇怪,不是指针越界读取了其他数据
11 个月之前 回复
wang2046783134
wang2046783134 是一样的。。试了3次
11 个月之前 回复
harchar
harchar   2017.01.16 08:35

以后碰到此类问题不要想太多,要么查资料,要么写代码做实验,这两个方法都能解决你的问题。

wang2046783134
wang2046783134 我一般先自己试,然后自己搜,还不清楚的就问人,但是网上说法不一,就像这里的评论一样,没有一个标准答案,自己试验的结果不明白怎么回事,所以才到这里提问,我的C功底还是不够好,还在不断的学习中,以后可以常常交流哈(●´∀`●)
11 个月之前 回复
qq_37474728
qq_37474728   2017.02.07 22:59

不初始化的话,里面的初始值会是垃圾数据(无用,并且不知道意义的数据)。

qq_31339221
qq_31339221   2017.02.12 19:25

没有初始化的数组内存储的为随机值。

pandalaiscu
pandalaiscu   2017.02.16 11:10

不初始的话,出现的就是之前计算机内存中存储的值。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!