1.数组的概念
2.一维数组的创建和初始化
3.一维数组的使用
4.一维数组在内存中的存储
5.sizeof计算数组元素个数
6.二维数组的创建
7.二维数组的使用
8.二维数组在内存中的存储
10.数组练习
1.数组的概念
数组是一组相同类型元素的集合
1.1元素类型是相同的
1.2数组内可以有一个或多个元素,但不能没有
2.一维数组的创建和初始化
2.1创建:type arr_name[正整数];
type:数组内元素的类型
arr_name:数组名
正整数:决定元素的个数
2.2初始化:type arr_name[正整数]={元素1,元素2,元素3......};
正整数可以省略,设定正整数时,要注意,该数值不能小于初始化的元素个数。
int arr[5]={1,2,3,4,5};//完全初始化
int arr[5]={1};//不完全初始化,第一个元素是1,其余的默认为0
2.3数组的类型,去掉名字就是类型
例子:int arr[5];
该数组的类型是int 【5】.
2.4数组初始化方括号内的数字可以省略,该数字默认为元素的个数
2.5字符数组初始化的两种方式
第一种:共三个元素,方括号内的数字默认为3
第二种:字符串用于初始化字符数组时,该字符串会被复制到字符数字中,是一种特殊的情况,字符串的末尾有个'\0',所以共4个字符,有4个元素,方括号内默认为4.
3.一维数组的使用
3.1数组下标
数组元素序号 | 1 | 2 | 3 |
下标 | 0 | 1 | 2 |
也就是说,第一个元素的下标是0,第二个是1,以此类推。
我们可以使用下标访问操作符(【】)通过下标来访问其对应的元素
举例:访问第一个元素:arr[0];
访问第二个元素:arr[1];
3.2:使用一维数组
#include <stdio.h>
int main()
{
int arr[3];//创建1个数组,它拥有三个元素
arr[0] = 1;//使用下标访问操作符,通过下标(0)来访问第一个元素
//并将其赋值为1
printf("%d", arr[0]); //使用下标访问操作符,通过下标(0)来访问第一个元素
//并将其打印到屏幕
return 0;
}
4.一维数组在内存中的存储是连续的
我们打印数组每个元素的地址,发现两个相邻元素的地址相差4(地址是16进制的)
5.sizeof计算数组元素个数
sizeof是关键字可以计算类型或变量的大小
1.计算类型:
size_t a = sizeof(int);
1.1 size_t是一种类型,叫无符号整型,约等于unsigned int
1.2 a的值是4,因为int类型的变量占4个字节
2.计算数组元素个数
2.1 %zd打印size_t类型的数据
6.二维数组的创建
6.1一个二维数组是由多个·一维数组所构成的,二维数组的元素是一维数组
6.2 创建二维数组:type arr_name[正整数][正整数];
6.2.1 type:二维数组中的一维数组中的元素的类型
6.2.2 arr_name:数组名
6.2.3 第一个方框内的正整数能省略,第二个不能。
为什么不能?
1.假设有数组:int arr[][3];假设数组有6个元素,我们可以这么放
1 | 2 | 3 |
4 | 5 | 6 |
可以正常放
假设有数组:int arr[3][];假设数组有6个元素,我们可以这么放
1 | 2 |
3 | 4 |
5 | 6 |
我们也可以这么放
1 | 2 | 3 |
4 | 5 | 6 |
还可以这么放
1 | 2 | 3 | 4 |
5 | 6 | ||
有多种放法,方法不唯一,不能明确指的是那种方法
6.3 二维数组的初始化
按照顺序初始化
int arr[3][3]={1,2,3,4,5,6};
1 | 2 | 3 |
4 | 5 | 6 |
按照行初始化
int arr[3][3]={{1,2},{3,4},{5,6}};
1 | 2 | |
3 | 4 | |
5 | 6 |
7.二维数组的使用
int arr[3][3]={1,2,3,4,5,6,7,8,9};
下标 | 0 | 1 | 2 |
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
2 | 7 | 8 | 9 |
访问第一个一维数组的第一个元素:arr[0][0];
访问第2个一维数组的第3个元素:arr[1][2];
访问第3个一维数组的第2个元素:arr[2][1];
以此类推
8.二维数组中一维数组中的元素中的存储也是连续的,即使它们不在同一行,假设有定义:int arr[2][2]={1,2,3,4};
下标 | 0 | 1 |
0 | 1 | 2 |
1 | 3 | 4 |
arr[1][0]的地址与arr[0][1]的地址也相差4
不信?
放图!
上面的图空行只是方便理解,在内存中存储时可是不会“空行”的哦!