1. 数组的概念
2. ⼀维数组的创建和初始化
2.1 数组创建
一维数组基本语法如下图所示:
存放在数组中的值被称为数组中的元素,在创建的时候我们可以指定数组的大小和元素类型。
例如我们想要储存5个班级的量化考核成绩,那我们就可以创建一个数组来进行储存。
double grade[5]
当然,我们可以依据需求来创建其它类型的数组:
char ch[5]; int math[10];
2.2 数组的初始化
在我们创建数组的时候,一般都会给定数组一些初始值,这个过程我们称为初始化。
如下图所示:
2.3 数组的类型
在上文,我们涉及到了数组的不同类型。
例如:
char ch[5];
int arr1[10];
double arr2[20];
3. ⼀维数组的使用
上文我们学习了一维数组的基本语法,一维数组可以存放数据,存放数据的⽬的是对数据的操作,那我们如何使⽤⼀维数组呢?
3.1 数组下标
在C语⾔中数组的访问提供了⼀个操作符,这个操作符叫:下标引⽤操作符。
int arr[10] = {1,2,3,4,5,6,7,8,9,10}
3.2 数组元素的打印
如果我们想要访问整个数组的内容,那怎么办?
3.3 数组的输入
4. ⼀维数组在内存中的存储
我们有了之前的知识,使用数组基本上没有问题了,如果想要深入了解数组,我们还是从数组在内存中的储存开始学习。
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("&arr[%d] = %p \n",i, &arr[i]);
}
return 0;
}
我们可以取地址上述代码数组中的元素:
从输出我们可以分析出,随着数组下标的增长,数组元素的地址四从小到大变化的,并且我们可以看出,每两个相邻元素地址差4(因为int是4个字节)。所以我们得出一个结论:数组元素在内存中是连续存放的。这就位以后我们使用指针来访问数组奠定了基础。
5. sizeof计算数组元素个数
在我们进行数组的学习时,我们经常想知道数组的元素个数,于是C语言给我们提供了sizeof用来计算元素个数。
sizeof:是C语言中的一个关键字,它可以用来计算类型或者变量大小。所以,我们使用sizeof来计算数组的大小。例如以下代码:
需要我们注意的是,这里输出的40是数组占内存空间的总大小,他的单位是字节。
如果我们想知道数组中具体的元素个数,我们可以使用sizeof(arr) / sizeof(arr[0])。这是因为数组中元素类型都是一样的,我们只要知道一个元素的字节大小,数组元素个数就可以轻松的计算出来。
那怎么计算一个元素所占字节大小?我们可以参考以下代码:
有了一个元素所占字节的大小,我们就可以计算出数组中的元素个数。
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d", sz);
return 0;
}
6. 二维数组的创建
6.1二维数组的创建
前面学习的数组都是一维数组。如果我们将一维数组作为一个新数组中的元素,那这个新数组就可以称为二维数组。同理,将二位数组作为一个新数组的元素,那这个新数组就可以称为三维数组。二维及二维以上的数组都被称为多维数组。
6.2二维数组的创建
那我们如何定义二维数组呢?
7. 二维数组的初始化
我们在创建二维数组的时候,给定二维数组一些初始值,这个就叫做二维数组的初始化。那我们该如何给定二维数组值呢?会不会跟一维数组一样?
7.1完全初始化
二维数组进行初始化的时候,跟一维数组一样,也是使用大括号初始化的。
#include <stdio.h>
int main()
{
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
return 0;
}
8. 二维数组的使用
8.1二维数组下标
我们在初步了解二维数组的初始化后,那我们该如何访问二维数组中的元素的呢?
#include <stdio.h>
int main()
{
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
return 0;
}
那上面数组中的元素就可以使用下标来确定了:
我们在了解下标后,是否有一个疑问——在我们对二维数组进行初始化的时候,二维数组的行和列的数值是否都需要给定?
8.2按照行初始化
我们先尝试将行的值省略:
编译器没有报错,这就证明我们可以省略行的数值。我们将这个二维数组打印出来:
8.3初始化时省略行,但是不能省略列
在上图中,我们对数组进行了初始化省略行,我们将arr1打印出来,对其进行观察。
9. 二维数组在内存中的存储
#include <stdio.h>
int main()
{
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
他的输出结果如下:
我们可以用图来描述一下:
这也可以解释8.3为什么只能省略行而不能省略列的。了解清楚⼆维数组在内存中的布局,有利于我们后期使⽤指针来访问数组的学习。
以上是在我的环境下展示出来的结果,如有错误,请给予指正。