“教小白精通编程”系列之“C语言教程” (版权所有,不得转载,擅自抄袭转载将承担法律责任)
6. 数组Array
存储一系列相同类型元素的一块连续存储空间(顺序集合)。
假如有100个同类型的元素,如果每个都起一个名字,可能是这样的:number0, number1, …, and number99。这100个同类元素我们可以将它们依次存放在一块内存中,我们只要用一个名字“numbers”来指示这块内存,然后用所谓的“下标”去访问每个元素:numbers[0], numbers[1], and …, numbers[99]。岂不更加方便?
声明数组
格式:
类型 数组名[大小]
类型 数组名[大小] = 初始化式
类型 数组名[] = 初始化式
例如:
int arr[10]; /*大小为10的数组,其中的数据元素没有初始值*/
int arr[10] = {0,1,2,3,4,5,6,7}; /*大小为10的数组,其中前8个数据元素有初始值*/
int arr[] = {0,1,2,3,4,5,6,7}; /*大小为8的数组,每个元素有初始值*/
特点: 大小固定-“指定或初始化决定”。
可以通过 “下标访问运算符[]” 去存取(读写)单独的数据元素。
/* defines an array of 10 integers */
int numbers[100];
/*我们可以用下标运算符[]去访问每个元素,下标从0开始,依次为:0,1,2,...999
比如, numbers[i]去访问下标是i的元素,即第i+1个元素
*/
numbers[0] = 10;
numbers[1] = 11;
numbers[2] = 12;
numbers[3] = 13;
numbers[4] = 14;
numbers[5] = 15;
numbers[6] = 16;
/*我们也可以用一个循环语句去访问每个元素*/
for(int i = 0 ; i<100; i++)
numbers[i] = 10+i;
多维数组
可以通过多个下标去存取其中的数据元素,其定义格式类似于一维数组,如下:
类型 数组名[ size1] [ size2] … [ sizek];
类型 数组名[ ] [ size2] … [ sizek] = {初始化公式}; /*类似于一维数组,其中第一维可以不指定大小,而由初始化式子中的个数决定!**
例如:
/*定义了一个二维数组,第一维(称为行)大小是3,第二维(称为列)大小为4*/
int a[3][4] = {
{0, 1, 2, 3} , /* 行下标为0的第1行的初始化 */
{4, 5, 6, 7} , /* 行下标为1的第2行的初始化 */
{8, 9, 10, 11} /* 行下标为2的第3行的初始化 */
};
/*定义了一个二维数组,第一维(称为行)大小是2,第二维(称为列)大小为4.
其中的行数由初始化式子中的个数确定
*/
int matrix[][4] = {
{0, 1, 2, 3} , /* 行下标为0的第1行的初始化 */
{4, 5, 6, 7} , /* 行下标为1的第2行的初始化 */
};
二维数组a的下标访问示意图:
程序示例:
#include <stdio.h>
int main () {
/* 一个5行2列的二维数组*/
int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
int i, j;
a[3][1] = 41; /*修改下标为[3][1]即第4行第2列的元素的值为41*/
/* 输出每个元素的值 */
for ( i = 0; i < 5; i++ ) {
/*输出下标为i的这一行的每个元素*/
for ( j = 0; j < 2; j++ ) {
printf("a[%d][%d] = %d\n", i,j, a[i][j] );
}
}
return 0;
}
程序执行结果为:
a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 41
a[4][0]: 4
a[4][1]: 8
练习
您的打赏是对我最大的鼓励!