在C语言编程中,定义一个数组时要不要初始化?

即a[M]={0}?有时不定义程序能运行,有时必须要初始化,谁知道为什么?谢谢... 即a[M]={0}?有时不定义程序能运行,有时必须要初始化,谁知道为什么?谢谢 展开
 我来答
娱乐小八卦啊a
高粉答主

2020-05-18 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117810

向TA提问 私信TA
展开全部

不是不能初始化,是初始化的不对。另外,数组最好用memset初始化。

(1)在定义数组时对数组元素赋以初值。如:

static int a[10]={0,1,2,3,4,5,6,7,8,9};

经过上面的定义和初始化后,a[0]=0,a[1]=1,… ,a[9]=9。

(2)初始化时可以只对一部分元素赋初值。例如:

static int a[10]={0,1,2,3,4};

定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。

扩展资料

数组的三种初始化方式

1、静态初始化

除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。例 int[] a={1,2,3};//静态初始化基本类型数组

Man[] mans={new Man(1,1),new Man(2,2)};//静态初始化引用类型数组

2、动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。int[] a1=new int[2];//动态初始化元素,先分配空间。

a1[0]=1;//给数组元素赋值

a1[2]=2;

3、数组的默认初始化

数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

实例:int a2[]=new int[2];//默认值0,0

boolean[] b=new boolean[2];//默认值 false,false

String[] s=new String[2];//默认值null

百度网友4de7b94
推荐于2017-09-09 · TA获得超过8153个赞
知道小有建树答主
回答量:1423
采纳率:93%
帮助的人:55.6万
展开全部
首先要清楚什么是初始化:
在声明变量的同时赋值就是初始化。
而在其后的赋值语句就不是初始化。
一般来说,如果你不给变量一个确定的值,就直接引用它,则系统不能保证运行的唯一性,而这是我们程序所不允许的。所以我们一般用初始化的方法来确定其值。
如char str[100]
引用memset(str,sizeof(str),0);
即将所有的数组元素初始化为0;
但并不总是这样。如下:
int i;
for (i=0;i<10;i++)...
i就不是通过初始化,而是用赋值的方法确定值的。

扩展到数组中,也是如此,如果你在引用数组元素前不把它的值确定下来,程序运行就可能不确定。
因为确定数组元素值的方法有两个:初始化和赋值,所以初不初始化要视情况而定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lishimin1972
推荐于2017-09-18 · TA获得超过741个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:445万
展开全部
首先要清楚什么是初始化:
在声明变量的同时赋值就是初始化。
而在其后的赋值语句就不是初始化。
一般来说,如果你不给变量一个确定的值,就直接引用它,则系统不能
保证运行的唯一性,而这是我们程序所不允许的。所以我们一般用初始化的方法来确定其值。
但并不总是这样。如下:
int i;
for (i=0;i<10;i++)...
i就不是通过初始化,而是用赋值的方法确定值的。

扩展到数组中,也是如此,如果你在引用数组元素前不把它的值确定下来,程序运行就可能不确定。
因为确定数组元素值的方法有两个:初始化和赋值,所以“必须要初始化”是没有道理的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kkspeed
2007-08-27 · TA获得超过1002个赞
知道小有建树答主
回答量:661
采纳率:0%
帮助的人:1051万
展开全部
这得看你自己的具体需求,如果你确定而且是非常确定你的数组中的每一个元素都会在以后的程序中被先赋值再调用(比如说,先向数组中读入了数据,再调用),那么没有必要初始化

如果你不能确定以上所说,也就是说,你会用到数组的默认值,那么,初始化数组是避免程序崩溃的好方法。

值得说的是,初始化数组会导致程序效率降低那么一点点(相当于隐形执行一个循环,给数组的每一个元素赋值),不过,这点影响应该不大。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wjse
2007-08-27 · TA获得超过1217个赞
知道小有建树答主
回答量:859
采纳率:0%
帮助的人:1046万
展开全部
需不需要初始化要根据具体情况来定。C语言编译器一般是不自动对数组初始化的,即编译器只是根据数组的定义开辟一块可用空间,至于这块空间原来是什么内容,编译器不管.
所以定义了数组以后,其中的内容是不可知的,有时开辟的空间是空白空间,那么其中就没有内容,也就是默认的0,如果开辟的空间是系统使用后又释放出来的,那其中的内容就不确定了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式