主要回顾C语言中关于数组的定义以及初始化。基础知识如数组用[],初始化值用{}将不会着重讲解。

一维数组

一维数组的定义与初始化是二维以及多维的基础。其中重点主要在初始化中。

一维数组的定义

1
2
3
4
5
6
7
8
9
10
11
/**
* 一、一维数组,数组的定义,数组的引用,数组的初始化
**/

//1、数组的定义与数组的引用
int arr1[10],i;

for(i=0;i<sizeof(arr1)/sizeof(int);i++){
printf("arr1 %d ,",arr1[i]);
}
printf("\n");

一维数组的初始化

一维数组的初始化主要有以下三个特点以及一个注意点。特点主要围绕初始化时是否指定数组的长度

  • 初始化指定长度的数组,如果初始化数组不够,全部用零自动填充
  • 初始化一个未指定长度的数组。那么编译器会自动生成{}数字相同的长度
  • 如果指定了长度的数组都初始化为零。可以使用{0}或者{相同长度的零}

注意:c语言的数组不支持动态数字,即必须从初始化开始时都固定,不同通过scanf这一类外部输入获取数组长度。

示例程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int i=0;
int arr2[10] = {1,2,3,5};
int arr3[] = {1,2,3,4,5,6,7,8,9,10};
int arr4[10] = {0};
for(i=0;i<sizeof(arr2)/sizeof(int);i++){
printf("arr2 %d ,",arr2[i]);
}
printf("\n");
for(i=0;i<sizeof(arr3)/sizeof(int);i++){
printf("arr3 %d ,",arr3[i]);
}
printf("\n");
for(i=0;i<sizeof(arr4)/sizeof(int);i++){
printf("arr4 %d ,",arr4[i]);
}
printf("\n");

二维数组

二维可以认为是一维数组的扩展。那么在扩展中,需要标识二维数组中的一维数组则采用{{},{}}形式

二维数组的定义

1
2
3
4
5
6
7
int mulArr1[3][4] = {0},k=0,l=0;
for(k=0;k<3;k++){
for(l=0;l<4;l++){
printf("%d",mulArr1[k][l]);
}
printf("\n");
}

二维数组的初始化

二维数组拥有一维数组特点的同时,也有自身自己的特点。其中自身的特点包含以下四个方面。其中的主要内容是是否用{{},{}}进行分割

  • 数组初始化定义的数组的所有位置,使用{{},{}}分割
  • 数组初始化定义的数组的所有位置,不使用{{},{}}分割。默认先填充行
  • 数组初始化定义的数组的部分位置,使用{{},{}}分割,初始化其中的部分内容,未初始化部分采用0替代。
  • 数组的初始化可以不用指定长度,多维数组以最长的作为最终的数组的长度。如:a[][2]={1,2,3},那么数组长度为a[2][2]

注意:二维数组只能标识在列处,其原因是行可以自动计算,列无法计算出来。后续省略可以按照此原则。如在三维数组使用a[][2][2]

示例程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int k=0,l=0;
int mulArr2[2][2] ={{1,2},{3,4}},
mulArr3[2][2] = {1,2,3,4},
mulArr4[2][2] = {{1},{3}},
mulArr5[][2] = {1,3,4},
mulArr6[][2][2] = {1,2,3};
printf("mulArr2\n");
for(k=0;k<2;k++){
for(l=0;l<2;l++){
printf("%d",mulArr2[k][l]);
}
printf("\n");
}

printf("mulArr3\n");
for(k=0;k<2;k++){
for(l=0;l<2;l++){
printf("%d",mulArr3[k][l]);
}
printf("\n");
}

printf("mulArr4\n");
for(k=0;k<2;k++){
for(l=0;l<2;l++){
printf("%d",mulArr4[k][l]);
}
printf("\n");
}

printf("mulArr5\n");
for(k=0;k<2;k++){
for(l=0;l<2;l++){
printf("%d",mulArr5[k][l]);
}
printf("\n");
}

多维数组

多维数组的本质还是在一维数组上的扩展,数组中嵌套了数组。按此理解,基本没啥问题。