如何初始化数组

如何初始化数组分析 如果直接输出未初始化的数组元素值 以观察未初始化的数组 实现方法代码如下所示 include lt stdio h gt defineSIZE10 intarray SIZE inti 0 for i 0 i lt SIZE i printf arry d d

分析:如果直接输出未初始化的数组元素值,以观察未初始化的数组,实现方法代码如下所示:

#include 
    #define SIZE 10 int main() { int array[SIZE] ; int i = 0; for(i = 0;i < SIZE; i++) { printf("arry[%d] = %d\n",i,array[i]); } return 0; }

       对于输出结果,可能大多数初学的人可能不懂。所以,为了数据安全,对数组也必须初始化。

分析 : 由于数组未初始化,各元素的值十分紊乱。其内存内容为编译器分配内存前的原始状态,因此,里面存放的是你不可能知道的数据。从程序输出的结果中也可以看到,未经初始化的数组中元素的数值都是混乱的。若在这时使用这些数组元素,将会导致一些不可预知的问题(严重的甚至导致系统瘫痪)。因此,为了避免出现一些不必要的错误,数组一经定义,最好立即对数组进行初始化。

       数组的初始化,就是定义数组变量的同时给其中的数组元素赋值,由于是给多个元素同时赋值,因此,形式上与单个变量赋值有所不同。主要有一下三种形势。

形势一
       对数组中的所有元素分别单独赋值,把初始化值按序列依次放在花括号中,并使用逗号隔开,实现对数组各个元素的赋值,形式如下:

数据类型 数组名[N] ={值0,值1,值2,……值(n-1)}; 

花括号内的最后一个值后,也可以跟一个逗号,形式如下:

数据类型 数组名[N] ={值0,值1,值2,……值(n-1),}; 

其中,花括号内的值0赋值给数组的第一个元素,值1赋值给第二个元素,……值(N-1)赋值给第N个元素。例如:

int hours[12]={1112}; 

也可以在最后一个元素后面跟一个逗号,形式如下:

int hours[12]={ 
  123456789101112};/*最后一个值后也可以跟逗号,这个 有点不美观,不推荐*/
int year[4]={ 
  356355355355356}; 
数据类型 数组名[N] ={值0,值1,值2,……值n};/*其中n<N-1*/

其中,数组的第一个到第N个元素会被依次初始化为值0到值n,剩余的元素会被初始化为0。实例如下:

int door [6]={1,2,3};

       初始化后,数组door的结果为:door [0]=1,door [1]=2,door [2]=3,door [4]=0,door [5]=0,door [6]=0.需要注意的是:被初始化的数组元素部分必须是数组中从第二个元素开始的连续序列。例如,以下语句是错误的:

int window[6]={ 
  1,,345};/*第二个元素未赋值*/ int window[6]={,,,3};/*第一个和第二个元素为赋值*/ 

       大部分的时候,初始化的值并无特殊意义,只是为了防止出现意外的数值。这种情况下,一般会将变量初始化为0或0.0。而对于这种情况下的数组初始化,可以用编译器的自动初始化的特性来简化初始化值序列。例如:

int mouth [12]={ 
  0}; double degree[12] = { 
  0.0}; char ip[16] = { 
  0}; 

形式三
       初始化数组时,还可以在定义中不给出容量大小,即让容量大小由初始化值序列的个数决定。一般情况下,这是可行但不推荐的方法。其形式如下:

char font[] = { 
  'a','b','c','d','e','f','g'};

由于初始化值序列有7个char型值,因此,数组font的容量为7。上面介绍了三种数组初始化的三种形式,下面来验证初始化的结果。实现方法代码如下:

#include 
    #define SIZE 5 int main() { int arry1[SIZE] = { 
  1,2,3,4,5}; //定义并初始化数组arry1 int arry2[SIZE] = { 
  0}; //定义并初始化数组arry2 int arry3[] = { 
  11,22,33,44,55}; //定义并初始化数组arry3 int i = 0; int j = 0; int k = 0; for(i=0;i < SIZE; i++) { printf("arry1[%d]=%2d ",i,arry1[i]); //输出arry1的值 } printf("\n"); for( j = 0;j < SIZE; j++) { printf("arry2[%d]=%2d ",j,arry2[j]); //输出arry2的值 } printf("\n"); for( k = 0;k < SIZE; k++) { printf("arry3[%d]=%2d ",k,arry3[k]); //输出arry3的值 } printf("\n"); return; }

运行结果:这里写图片描述
代码分析
● 第六行,定义并初始化数组arry2,对arry2初始化序列只包含一个整型数值0,其余的元素由编译器自动赋值0。初始化后,数组元素如上述运行结果第二行所示。
● 第11~24行,使用三个循环分别将三个数组的内容输出。
● 第21行,可以改为for(k = 0;k < sizeof(array3)/sizeof(array3[ k ]); k++);
● 第23行,printf( ” array3[ %d ] = %2d ” , k,array3[ k ]);
       上例中第三个数组通过17,18行代码输出,其中,检测数组大小用了 sizeof(array3)/sizeof(array3[ k ],它表示数组 array3所占字节/一个整型数字所占的字节数,其相除结果也就是数组元素的个数,sizeof()对于其他类型的数据也同样适用。












版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176063.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:47
下一篇 2026年3月26日 下午10:47


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号