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最好手动初始化,这是我搜到的答案,还是谢谢你了
一年多之前 回复
a15129095654
a15129095654   2017.01.15 23:29

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

lhf774962063
lhf774962063   2017.01.15 23:14

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

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

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

wang2046783134
wang2046783134 我一般先自己试,然后自己搜,还不清楚的就问人,但是网上说法不一,就像这里的评论一样,没有一个标准答案,自己试验的结果不明白怎么回事,所以才到这里提问,我的C功底还是不够好,还在不断的学习中,以后可以常常交流哈(●´∀`●)
一年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
巧用c语言中数组部分元素初始化
我们学会了c语言编程语法基础,还要学会活学活用里面的c语法规定。让我们回想一下当初学习c语言的数组模块:数组(array)由一些类型相同的元素构成。当我们只是声明数组(int a[10];//声明了含有10个int类型元素的数组)没有初始化时,其实就和声明普通变量(int a;)一样,存储的是无用的值;但是,如果部分初始化数组,未初始化的元素则被设置为0。
C语言--一堆数组的定义和初始化
 数组:            1.定义数组:                        #include &amp;lt;stdio.h&amp;gt;                        int main()                 {        //这个只表示有十个元素,并不代表有array[10],因为它的下标是从0开始的        int array[10];//定义了...
C语言中数组的初始化问题
C语言中数组的初始化问题 标签: 语言c编译器 2012-07-21 18:02 1860人阅读 评论(0) 收藏 举报  分类: Android闲谈(62)  版权声明:本文为博主原创文章,未经博主允许不得转载。 C语言中数组的初始化问题 一维数组 Int a[] = {1,2,3,4} //用数去填充 Int a[3] = {1,2
C语言的静态数组初始化
数组可以初始化,即在定义时,使它包含程序马上能使用的值。   例如,下面的代码定义了一个全局数组,并用一组Fibonacci数初始化:     int iArray[10]={1,1,2,3,5,8,13,21,34,55); //初始化     void main()     {       //...     }   初始化数组的值的个数不能多于数组元素个数,初始化数组的值也
C/C++数组初始化的一些误区
以前我这样初始化一个数组,并自我感觉良好:int a[5] = { 0 }; // 全部初始化为0这种简单的写法让我非常爽,于是我又想把数组全部初始化为1:int a[5] = { 1 }; // 我想全部初始化为1直到十分钟前,我都以为这句代码确实能够将5个元素全部初始化为1,但事实跟我想的完全不同!(基础的东西革命的本钱,疏漏不得啊) 全部初始化为0的那行代码确实是没问题的,可以
c的关于数组初始化 和 memset用法
今天为了彻底搞定一个关于c中数组初始化和声明不同情况下,比如只声明一个数组char str[20];那么这str里面是什么内容呢?我用vc6++,debug下看到都是-56饿asc码,后来请教了一个华为的大牛,他说 按照理论来说里面的内容都是有可能的,这和叫做“脏内存”或者叫做“野数组”。好了第一个问题搞懂了。 第二个问题 memset的问题,之前在万臣解析fast协议的时候,因为是刚入门
C语言数组的初始化总结
本人第一次发表微博 ,所发内容大部分来自对博友的发表微博的总结,程序是亲自测试过的,如果内容有不对或者不严谨的地方,请高手不吝指教。 /* 本程序用于测试:数组的初始化。 (1) 定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为0;如果不初始化,局部变量在栈上,各数组元素的值将是随机数; (2) 数组初始化:程序员至少必须把数组元素的第一个数组元素初始化为
C 语言和 OC 数组初始化的区别
在项目中无意中看到一段代码引起了我的注意:         UIBezierPath *tmpPath = [[UIBezierPath alloc] init];         CLLocationCoordinate2D coordinates[[store.polygon_coordinates count]];         for(int i=0;ipol
C语言中的结构体,结构体中数组初始化与赋值
原作地址:https://www.cnblogs.com/zhangfeionline/p/5913905.html 最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论; 1.结构体的定义和赋值  结构体是可以直接初始化的,在定义的时候,就可
如何初始化char数组
1、直接逐个初始化字符数组: char str[10]={ 'I',' ','l','i','k','e',' ','c','a','t'};注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则按初始化列表初始字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' )。 2、用字符串常量来初始化字符数组: 在c语言中,将字符串作为字符数组来处理。因