一维数组
定义:int a[6]
在内存中开辟6个4字节的空间,空间名叫a。
1.一维数组的创建和初始化
①数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。若为int型则都为int型。
(数组个数绝对不能超过最大容量)
int a[0];//[]内必须是常量/常量表达式(3+8),不能是一个变量(x...)
int a[最大容量(数组个数)]={元素}
②数组的初始化:在数组创建时,我们也可以为数组初始化。当然也可以不初始化,根据实际要求判断是否初始化。
int arr1[3] = {1, 2, 3};//下标是从0开始到n-1结束
int arr2[] = {1, 2, 3};//在这里,我们arr[3]里边的数字可以不用写;
int arr3[3] = {1, 2};//也是可以的,只是把最后一个数初始化为0了而已,也就是自动补0
int arr4[3] = {1, 2, 3, 4};//是不可以的,不能超过数组长度
int arr5[5] = {};//此时数组未初始值,默认为{0,0,0,0,0}
char arr5[3] = {'a', 98, 'c'};//因为是字符类型,所以98其实就是字符'b'
char arr6[] = "abcdef";
③printf和表达式的数组引用与数组定义的区别
我们定义一个整型数组,让数组最大容量为10,则有10个元素,再用printf输出数组下标。
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d",a[5]);
输出结果
a[5]下标是5,则是1 2 3 4 5 6
下标0 1 2 3 4 5 对应元素是6
2.矩阵数组(若看的费劲请看②矩阵数组进阶理解)
int a[3][4] = {11,12,13,14,15,16,17,18,19,20,21,22}
int a[3][4] = {{11,12,13,14},{15,16,17,18},{19,20,21,22}}
其中
a[3][4]
表示对后面数组元素进行矩阵组合,3行4列。则有
11 12 13 14
15 16 17 18
19 20 21 22
printf("%d",a[2][1]);
①假如要输出第下标2.1,则从0开始是第一行,则是行为第二行,列为第一行列。
0 1 2 3 //下标对应的列数
0 11 12 13 14
1 15 16 17 18
2 19 20 21 22
//下标对应的行数
解答:则输出的是19
注意:定义数组的时候是定义指定长度的数组。但printf和表达式中引用的是数组的下标,不是引用所有数组元素。
②矩阵数组进阶理解
int a[3][4] = {{11,12,13,14},{15,16,17,18},{19,20,21,22}}
下标 | ---- | 0 | 1 | 2 | 3 |
---|---|---|---|---|---|
---- | 行/列 | 1 | 2 | 3 | 4 |
0 | 1 | 11 | 12 | 13 | 14 |
1 | 2 | 15 | 16 | 17 | 18 |
2 | 3 | 19 | 20 | 21 | 22 |
当我输入
printf("%d",$a[1][2])
,我们知道数组在printf和表达式中引用的数组的下标,而不是数组元素,只有定义一个数组的时候才会存在所有元素,所有这里的a[1][2]
表示打印“行下标为1,列下标为2的数”则为17也有以下公式可表达
行下标+1=行数
列下标+1=列数