1. 一维数组
1.1 数组的创建
一维数组创建的基本语法如下:
type arr_name[常量值]; //arr_name表示数组名
① type 指定的是数组中存放数据的类型,可以是:char、short、int、float等,也可以自定义的类型;
② arr_name 指的是数组名的名字,这个名字根据实际情况,自己定义即可;
③ [] 中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏;
比如我们可以定义以下数组:
int math_score[30];//存储某班30人的数学成绩
char arr[10];//字符类型数组
//浮点型数组
double arr[10];
float arr[10];
1.2 数组的初始化
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多 - 超出数组大小的范围
int arr3[3] = {1, 2, 3, 4};
1.3 数组的类型
int arr1[3];
char arr2[4];
double arr3[5];
arr1 数组的类型是 int [3]
arr2 数组的类型是 char [4]
arr3 数组的类型是 double [5]
#include <stdio.h>
//我们来打印各个数组的类型,来了解各个数组所占空间的大小 - 单位是字节
int main()
{
int arr1[3] = { 0 };//int - 一个元素所占空间大小为4个字节
printf("%d\n", sizeof(int [3]));
char arr2[4] = { 'a' };//char - 一个元素所占空间大小为1个字节
printf("%d\n", sizeof(char [4]));
double arr3[5] = { 0.0 }; //double - 一个元素所占空间大小为8个字节
printf("%d\n", sizeof(double [5]));
return 0;
}
运行结果:
2. 一维数组的使用
2.1 一维数组的下标
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
有了数组的下标,我们就可以轻松地访问数组的元素,比如我们要访问下标为5的元素,我们就可以使用 arr[5],想要访问下标是9的元素,就可以使用 arr[9],但切记不能使用 arr[10],因为这已经超出arr 数组的范围,arr 数组最大只能到 arr[9],如若强行引用 arr[10],则只能得到一个随机值。
例子:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[5]);
printf("%d\n", arr[9]);
printf("%d\n", arr[10]);//err
return 0;
}
运行结果:
2.2 数组元素的输入和输出
接下来,如果想要访问整个数组的内容,实现整个数组的输入和输出,该怎么办呢?
只要我们能够产生数组所有元素的下标就可以了,我们可以使用 for 循环产生0~9的下标,接下来使用下标来访问数组就行了。
例子:实现1~10的输入,然后再将1~10输出
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = { 0 };//这里是定义数组的长度,一旦定义完成,数组大小就是完全确定的
//输入1~10
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
//输出1~10
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
运行结果:
2.3 sizeof 计算数组元素的个数
假如说你想知道一个数组的大小,但是它只给了你一组数组里面的元素,并没有给数组的长度,比如:arr [] = {2,6,7,9,17,24,36,45,66,32};试想这么长的一个数组,里面有多少元素,我们不知道,得一个个数才能知道,那我们有什么方法能快速计算出数组元素吗?当然有,那就是 sizeof 。
例子:计算 arr [] = {2,6,7,9,17,24,36,45,66,32} 数组元素的个数
#include <stdio.h>
int main()
{
int arr[] = { 2,6,7,9,17,24,36,45,66,32 };//定义一个数组,没有说明数组长度
int num = sizeof(arr) / sizeof(arr[0]);//计算数组个数
printf("%d\n", num);
return 0;
}
运行结果:
为什么我们可以通过这种方法去计算数组元素的个数呢?这是因为,sizeof(arr) 计算的是整个数组arr 所占空间的大小 - 单位是字节,而 sizeof(arr[0]) 计算的是首个元素 arr[0] 所占空间的大小 - 单位是字节,又因为 arr 数组里所有的元素类型相同,所以所占空间大小是一样的,故而我们可以通过 num = sizeof(arr) / sizeof(arr[0]) 来计算数组元素个数。
3. 二维数组的创建
3.1 二维数组的概念
那我们如何定义二维数组呢?语法如下:
type arr_name[常量1][常量2];
//例如
int arr[3][6];//3表示数组有3行,6表示每一行有6个元素,int表示数组的每个元素是整型类型
double data[2][8];//2表示数组有2行,8表示每一行有8个元素,double表示数组的每个元素是浮点型类型
对比一维数组 arr[10], 一维数组可以看作是:数组名+变量,数组名是:arr,变量是:10;而二维数组 arr[3][6] 同样也可以看作是:数组名+变量,它的数组名是:arr[3],变量是:6。这样我们就可以很好地将一维数组和二维数组联系起来,二维数组可以看作将一维数组作为二维数组的元素而构成的数组,这里就值得大家细细思考。
4. 二维数组的初始化
4.1 不完全初始化
int arr1[3][6] = {0};
int arr2[3][6] = {1,2};
4.2 完全初始化
int arr3[3][6] = {1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8};
4.3 按照行初始化
int arr4[3][6] = {{1,2},{3,4},{5,6}};
4.4 初始化时省略行,但是不能省略列
int arr5[][6] = {1,2,3};
int arr6[][6] = {1,2,3,4,5,6,7,8};
int arr7[][6] = {{1,2}, {3,4}, {5,6}};
5. 二维数组的使用
5.1 二维数组的下标
int arr[3][6] = {1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8};
蓝色代表列下标,紫色代表行下标。⽐如,我们说:第1 ⾏,第4列,快速就能定位出6。
#include<stdio.h>
int main()
{
int arr[3][6] = { 1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8 };
printf("%d\n", arr[1][4]);
return 0;
}
运行结果:
5.2 二维数组的输入和输出
#include<stdio.h>
int main()
{
int arr[3][6] = { 0 };
//输入
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 6; j++)
{
scanf("%d", &arr[i][j]);
}
}
printf("\n");
//输出
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 6; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
运行结果: