首页 > 编程知识 正文

数组初始化,成员数组怎么初始化

时间:2023-05-03 07:14:01 阅读:114545 作者:3243

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

# include stdio.h # definesize 10 int main ({ intarray [ size ]; int i=0; for(I=0; i SIZE; I ) (printf ) (Arry ) ) d )=%dn ),I,Array ) I ); }返回0; }运行结果如下。

关于输出结果,初学者可能很多不知道。 因此,为了数据安全,数组也必须初始化。

分析:由于数组未初始化,各元素的值非常混乱。 该内存的内容是编译器分配内存之前的原始状态,因此其中包含了无法知道的数据。 从程序输出的结果可以看出,未初始化的数组中的所有元素的数值都很混乱。 使用这样的数组元素会导致意外的问题。 严重的情况下,系统会瘫痪。 因此,为了避免不必要的错误,建议在定义数组后立即初始化数组。

数组初始化是指在定义数组变量的同时为其中的数组元素赋值。 因为同时为多个元素赋值,所以在形式上与为单个变量赋值不同。 主要有三种形势。

形势一

通过为数组中的所有元素单独赋值,将初始化值按顺序放在大括号中,并用逗号分隔,以:的形式实现数组中每个元素的值,如下所示

数据类型数组名称[N]={值0、值1、值2、……值(n-1 ); 也可以在大括号中的最后一个值之后加上逗号。 型号为:

数据类型数组名称[N]={值0、值1、值2、值(n-1 )、}; 其中大括号中的值0被分配给数组的第一个元素,值1被分配给第二个元素,……值(N-1 )被分配给第n个元素。 例如:

int hours[12]={123456789101112}; 也可以在最后一个元素后加上逗号。 格式为以下:

int hours [ 12 ]={ 1,2,3,4,5,6,7,8,9,10,11,12 }; /*也可以在最后一个值后加上逗号,但这有点不漂亮,因此在执行*/初始化后,方括号中的值数组将依次分配给hours元素,hours[0]为1,hours[1]为2。

hours[2]为3,hours[3]为4,hours[4]为5,hours[5]为6,hours[6]为7,hours[7]为8,hours[8]为9,hours [

此外,初始化的数字列不能大于数组的容量。 例如:

int year [4]={ 356,355,355,355,356 }; 编译器报告:”two many initializers”(初始值太多),因为代入5个数值只能保存4个元素的数组变量。形式二

也可以只为数组的某些元素赋值。 编译器会自动将其馀元素的内存空间初始化为0,并为其分配类型为int的0,为浮点型的0.000000。 标准格式为以下:

数据类型数组名称[N]={值0、值1、值2、值n}; /*其中,在nN-1*/中,数组中从开头到结尾的元素依次从值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.3358ww

int window[6]={1,3,4,5 };/*第二个元素未分配值*/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 stdio.h # definesize 5int main () in tarry1[ 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()对于其他类型的数据也同样适用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。