当前位置: > 华清远见教育集团 > 嵌入式学习 > 讲师博文 > C语言数组如何初始化
C语言数组如何初始化
时间:2018-01-12作者:华清远见

1.一维数组的初始化

1.1 未初始化的一维数组一维数组的成员在没有初始化时,数组成员的值都是未知的,一旦访问到未知的值,可能导致不可预料的情况,严重时可以导致软件运行异常。
下面,将没有初始化的数组对应的值打印
1. #include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[5];
6.
7. int i = 0;
8. for(i = 0;i < 5;i++)
9. {
10. printf(" %d ",numbers[i]);
11. }
12. printf("\n");
13.
14. return 0;
15. } 

输出结果下:

1. 1088063360 21991 1088062960 21991 1255894432

可以看出输出的结果是随机的,所以一般情况数组需要给每个元素一个确定的值.

1.2 全部元素初始化

一维数组的初始化就是在定义数组时给每个元素依次赋值,一般语法如下:

1. 数组元素类型 数组名[数组元素个数] = {元素值列表}

例如给一个有5个整型元素进行初始化:

1. int numbers[5] = {1,2,3,4,5};

在上述初始化中,数组元素的值依次为:

1. numbers[0] = 1;

2. numbers[1] = 2;

3. numbers[2] = 3;

4. numbers[3] = 4;

5. numbers[4] = 5;

如果数组的全部元素初始化后,则可以省略数组元素个数:

1. int numbers[] = {1,2,3,4,5};//

省略元素个数在省略元素个数的情况下,如果需要计算数组元素个数可以使用下面的公式

1. 数组元素的个数 = 数组总的内存大小 / 数组每个元素的大小

例如在计算 numbers 数组时,可以这样计算: 1. sizeof(numbers) / sizeof(int)

实际在使用时如下:
1. include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[5] = {1,2,3,4,5};
6.
7. int i;
8. for (i = 0;i < sizeof(numbers)/sizeof(int);i++)
9. {
10. printf(" %d ",numbers[i]);
11. }
12. putchar('\n');
13. return 0;
14. }

输出结果为:

1. 1 2 3 4 5

1.3 部分元素初始化

在一维数组中也可以为部分元素进行初始化,使用的方式如下:

1. int numbers[5] = {1,2,3};//对部分元素进行初始化

如果只初始化部分元素,则剩下的没有初始化的元素的值为0

具体使用如下:
1. #include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[5] = {1,2,3};
6.
7. int i;
8. for (i = 0;i < sizeof(numbers)/sizeof(int);i++)
9. {
10. printf(" %d ",numbers[i]);
11. }
12. putchar('\n');
13. return 0;
14. } 

输出结果如下:

1. 1 2 3 0 0

1.4 指定元素初始化

一维数组在初始化时也可以指定为某一个或者几个元素进行初始化,例如可以为第2个元素和第4个元素进行初始化

具体的语法如下

1. int numbers[5] = {[2] = 100,[4] = 200};//指定元素初始化,numbers[2] = 100, numbers[4] = 200

具体使用如下:
1. #include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[5] = {[2] = 100,[4] = 200,};//指定第2个元素,第4个元素进行初 始化(从0开始计)
6.
7. int i;
8.
9. for (i = 0;i < 5;i++)
10. {
11. printf(" %d ",numbers[i]);
12. }
13.
14. putchar('\n');
15.
16. return 0;
17. }
18. ~ 

输出结果如下:

1. 0 0 100 0 200

一维数组的初始化必须在定义指定元素列表,否则需要每个元素依次赋值
1. int numbers[5];
2. numbers = {1,2,3,4,5};//error :不允许,只能一个一个元素依次赋值
3.
4.
5. int i = 0;
6. for (i = 0;i < 5;i++)
7. numbers[i] = i;

2.二维数组的初始化

2.1 二维数组全元素初始化

二维数组的初始化与一维数组类似,具体的语法如下:

1. int numbers[2][3] = {{1,2,3},{3,4,5}};//初始化二维数组,由两个一维数组构成 .

具体使用如下 :

1. #include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[2][3] = {{1,2,3},{4,5,6}};
6.
7. int i,j;
8. for (i = 0;i < 2;i++)
9. {
10. for (j = 0;j < 3;j++)
11. {
12. printf(" %d ",numbers[i][j]);
13. }
14. putchar('\n');
15. }
16. return 0;
17. } 

具体输出结果如下:

1. 1 2 3

2. 4 5 6

在全部元素初始化后,可以省略行下标,但是不能省略列下标.

1. int numbers[][3] = {{1,2,3},{4,5,6}};

2.2 线性初始化

由于二维数组在内存存储时,仍然是按照线性的存储方式,具体的存储结构如下图:

C语言数组

在初始化时,也可以按照一维数组的方式进行初始化

1. int numbers[2][3] = {1,2,3,4,5,6};//按照一维数组的方式进行存储

具体使用方式如下:
1. #include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[2][3] = {1,2,3,4,5,6};
6.
7. int i,j;
8. for (i = 0;i < 2;i++)
9. {
10. for (j = 0;j < 3;j++)
11. {
12. printf(" %d ",numbers[i][j]);
13. }
14. putchar('\n');
15. }
16. return 0;
17. }

输出结果如下:

1. 1 2 3

2. 4 5 6

2.3 部分元素初始化

与一维数组一样,也可以对部分元素进行初始化,具体方式如下:

1. int numbers[2][3] = {{1,2},{4,5}};

具体的代码如下:
1. #include <stdio.h>
2.
3. int main(int argc,char *argv[])
4. {
5. int numbers[2][3] = {{1,2},{4,5}};
6.
7. int i,j;
8. for (i = 0;i < 2;i++)
9. {
10. for (j = 0;j < 3;j++)
11. {
12. printf(" %d ",numbers[i][j]);
13. }
14. putchar('\n');
15. }
16. return 0;
17. } 

输出结果为:

1. markyang@ubuntu:~/Templates$ ./a.out

2. 1 2 0

3. 4 5 0

对于没有初始化的元素,对应的会设置为0.


发表评论
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号