一.一维数组
1.一维数组的定义格式为:
类型说明符 数组名[常量表达式];例如: int a[10];
它表示定义了一个整形数组,数组名为a,有10个整形元素。
2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。
3.常量表达式中可以包括常量和符号常量,但不能包含变量。
数组说明中其他常见的错误:
① float a[0]; /* 数组大小为0没有意义 */
② int b(2)(3); [ ] /* 不能使用圆括号 */
③ int k, a[k]; /* 不能用变量说明数组大小*/
- 引用的格式为:
- 数组名[下标]
- C语言中,数组元素的下标从0开始,而且必须为整型常量或变量。因此,上面定义的数组array包含的元素为:int a= 5; array[a] = 99;
- array[0], array[1], array[2], array[3], array[4]
- 数据元素本身相当于一个变量,因此,对数组元素的操作类似于对变量操作。
一维数组:
float mark[100];
每个数据元素占用的字节数,就是基类型的字节数,一个元素占4个字节。系统会为一个数组分配一段连续的存储空间。数组的首地址就是第0个元素的地址。
一维数组的初始化:
1.在定义数组时对数组元素赋以初值。
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
2. 可以只给一部分元素赋值。例如:
int a[10]={0,1,2,3,4};
定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。
3. 如果想使一个数组中全部元素值为0,可以写成:
int a[10]={0,0,0,0,0,0,0,0,0,0};
或int a[10]={0};
不能写成:int a[10]={0*10};
4.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
例如 : int a[5]={1,2,3,4,5};
也可以写成 int a[]={1,2,3,4,5};
int a[10]={1,2,3,4,5}; 只初始化前5个元素,后5个元素为0。
二.二维数组
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];
例如:
定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。
如下:float a[3][4],b[5][10] ;
注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。
例如:可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。
引用形式为:
数组名[第一维下标] [第二维下标]
例如:a[i][j]引用了二维数组a的第i行第j列元素
二维数组的初始化
数据类型 :
数组名 [常量表达式1][常量表达式2]={ 初始化数据 };
4种方法对二维数组初始化:
1.分行给二维数组赋初值。
例如: int a[3][4]={{1,2,3,4},{5,6,7,8},
{9,10,11,12}};
2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
例如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3.可以对部分元素赋初值。
例如: int a[3][4]={{1}, {5}, {9}};也可以对各行中的某一元素赋初值,如int a[3][4]={{1}, {0,6}, {0, 0, 0, 11}};
4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
例如:
int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};等价于:
int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
二维数组在内存中是按照二维数组元素的下标从小到大的顺序来存储的。即首先存储二维数组第一行元素中的所有元素,然后依次存储接下来的元素。上述的二维数组a在内存中的映射如表所示。
这里假设系统为二维数组a分配的内存首地址为BFD5CACC
内存首地址(16进制) | 数组元素 |
| |
BFD5CACC | a[0][0] | a[0] | |
BFD5CAD0 | a[0][1] | ||
BFD5CAD4 | a[0][2] | ||
BFD5CAD8 | a[1][0] | ||
a[1] | |||
BFD5CADC | a[1][1] | ||
BFD5CAE0 | a[1][2] |
由此不难看出二维数组元素存储的各个位置。