数组的概念
数组是一种相同类型元素的集合,可以用来存储多个相同类型的元素,数组元素的个数不能为0。
一维数组
创建
type arr_name[常量值];
1:type是数组中存放数据的类型,可以是: char、short、int、float 等,也可以自定义的类型。
2:arr_name是数组的名字,这个名字根据实际情况,起的有意义就行。
3:[ ]中的常量值是用来指定数组的大小的,代表数组的元素个数。
初始化
数组在创建的时候,我们需要给定一些初始值,称为初始化。数组的初始化一般使用大括号,将数据放在大括号中。
下面是一些初始化的例子:
//完全初始化
int age[5] = {15, 17, 30, 7, 30};
//或者int age[] = {10, 5, 22};//[]中没有值,则初始化了几个值就代表数组有几个元素
//不完全初始化
int age[5] = {20};//第⼀个元素初始化为20,剩余的元素默认初始化为0
char ch[6] = {'a', 'f'};
//或者char ch[6] = "abc";//字符串末尾会隐藏一个\0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
数组的类型
和变量类似,数组也是有类型的,例如:
int arr1[5] = {1, 2, 3, 4};
这句代码中数组的类型是int [5],但数组元素的类型是int。
数组的使用
C语言规定数组是有下标的,且下标是从0开始的。同时,C语言又提供了一个操作符[ ],称为下标引用操作符,通过这个操作符就可以访问到数组中的元素了。下面举一个例子:
写一个代码完成数组的输入和打印
#include <stdio.h>
int main()
{
int arr[5] = { 0 };
for(int i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
一维数组在内存中的存储
数组在内存中是连续存放的,且随着数组下标的增长,地址是由低到高变化的。(内存中的每一块空间其实都有一个编号,通常叫做地址)
二维数组
二维数组可以看成是把一维数组作为元素的数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。
创建
type arr_name[常量值1][常量值2];
1:type是数组的类型。
2:arr_name是数组名。
3:常量值1表示数组有几行、常量值2表示数组每行有几个元素。
初始化
//不完全初始化
int arr1[2][3] = {1, 2};
0 | 1 | 2 | |
0 | 1 | 2 | 0 |
1 | 0 | 0 | 0 |
//完全初始化
int arr2[2][3] = { 1,2,3, 4,5,6 };
0 | 1 | 2 | |
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
//按行初始化
int arr3[2][3] = { {1, 2}, {4, 5} };
0 | 1 | 2 | |
0 | 1 | 2 | 0 |
1 | 4 | 5 | 0 |
//初始化时可省略行,但不能省略列
int arr4[][3] = { 1, 2, 3, 4 };
0 | 1 | 2 | |
0 | 1 | 2 | 3 |
1 | 4 | 0 | 0 |
二维数组的使用
二维数组也是通过下标进行访问的,C语言规定,⼆维数组的行是从0开始的,列也是从0开始的。只要锁定了行和列就能唯一锁定数组中的某个元素。
下面举个例子:写一个代码实现二维数组的输入和输出
#include <stdio.h>
int main()
{
int arr[2][3] = { 1,2,3, 4,5,6 };
int i = 0;//遍历⾏
//输⼊
for(i=0; i<2; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<3; j++) //产⽣列号
{
scanf("%d", &arr[i][j]); //输⼊数据
}
}
//输出
for(i=0; i<2; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<3; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
运行结果:
二维数组在内存中的存储
二维数组在内存中也是连续存放的,例如:
int arr[2][3] = { 1,2,3, 4,5,6 };
0 | 1 | 2 | 0 | 1 | 2 |
1 | 2 | 3 | 4 | 5 | 6 |
arr[0] | arr[1] |
计算数组元素的个数
为了写代码更加灵活,我们常常需要求出数组元素个数。
sizeof关键字
1:sizeof是一个关键字,也是一个操作符,可以用来计算操作数的类型大小,单位是字节。
2:sizeof操作符的操作数可以是类型、变量、表达式。
3:sizeof计算的结果是sizeof_t类型的,用%zd来打印。
sizeof计算数组元素个数
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
如果要计算arr数组中的元素个数,可以用下面这个代码
int sz = sizeof(arr) / sizeof(arr[0]);
sizeof(arr)计算的是数组所占内存空间的总大小,即数组中元素类型的大小乘以数组元素个数。
sizeof(arr[0])计算的是数组中单个元素所占内存空间的大小。
用数组所占内存空间的总大小除以单个元素所占内存空间的大小就是数组元素的个数。