基本魔法语言数组 (一) (C语言)

🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
🔭个人主页:散峰而望
🚀学习方向: C/C++等方向
📌专栏系列:
- 📖《C语言:从基础到进阶》
- 📚《编程工具的下载和使用》
- 🚀《C语言刷题》
💬人生格言:冀以尘雾之微,补益山海,荧烛末光,增辉岁月。
🎬博主简介

文章目录
- 前言
- 1. 数组的概念
- 2.一维数组的创建和初始化
- 2.1 数组的创建
- 2.2 数组的初始化
- 2.3 数组的类型
- 3. 一维数组的使用
- 3.1 数组下标
- 3.2 数组元素的打印
- 3.3 数组的输入
- 4.一维数组在内存中的存储
- 5.sizeof计算数组元素个数
前言
如果说变量是散落的魔法卷轴,那么数组就是精心打造的卷轴陈列架,让知识有序归位,让力量整齐排列。在这里,你不再是那个手忙脚乱、四处寻找单个卷轴的学徒,而是能统御成百上千魔法元素的列阵法师。管理一支魔法军团,只需要编号和阵列来组织他们,这正是数组的精髓。
准备好了吗?让我们一同打开这扇通往有序世界的大门,学习如何用数组这把钥匙,开启高效编程的魔法宝库!
1. 数组的概念
数组相当于一个魔法卷轴架 – 一个专门存放同类魔法卷轴的固定架子,即一组相同类型元素的集合。
从中我们可以发现两个有价值信息:
- 数组中存放的是1个或多个数据,但是数组元素个数不为0。
- 数组中存放的多种数据类型是一样的。
数组一般分为一维数组和多维数组,多维数组一般比较常见的是二维数组。
2.一维数组的创建和初始化
2.1 数组的创建
一维数组相当于单排卷轴架,其创建的基本语法如下:
type arr_name[常量值]| |
数组元素类型 数组名
常量值-数组元素的个数
放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
- type指定的是数组中存放数据的类型,可以是:char、short、int、float等,也可以自己定义的类型。
- arr_name指的是数组的名字,这个名字看情况起名,有意义就行。
比如:我们想存储某个公司近20天的人员情况,我们可以创建一个数组,如下:
int personal[20];
当然我们也可以根据需要创建其他类型和大小的数组:
char ch[6];
double score[8];
2.2 数组的初始化
有时候,数组创建的时候需要给定一些初始值,这种就被称为初始化。
那数组如何初始化呢?数组的初始化一般使用大括号,将数据放在打括号里面。数组如果进行了(完全)初始化,可以不指定数组的大小,是可以省略的。因为数组的大小是根据初始化的内容来推断。
完全初始化:
int arr1[5] = {1,2,3,4,5};不完全初始化:
int arr2[4] = {1};错误的初始化-初始化项多余
int arr3[3] = {1,2,3,4};
2.3 数组的类型
数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组比喻的类型。
如下:
int arr1[10];
int arr[12];
char ch[5];
arr1数组的类型是int [10]
arr2 数组的类型是int [12]
ch 数组的类型是char [5]
3. 一维数组的使用
学习了一维数组的基本语法,一维数组可以存放数据,存放数据的目的是对数据的操作,那我们如何使用一维数组呢?
3.1 数组下标
C语言规定数组是有下标的,下标是从0开始。如果数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};

在C语言中数组的访问提供了一个操作符**[]**,这个操作符叫:下标引用操作符。
有了下标操作符,我们就可以轻松的访问到数组的元素,我们就可以轻松的访问数组元素了。比如我们访问下标为6时的元素,我们就使用arr[6],想要访问下标为2的元素,就可以使用arr[2],代码如下:
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", arr[3]);printf("%d\n", arr[8]);return 0;
}

3.2 数组元素的打印
如果想要访问整个数组的内容,那该怎么办呢?
只要我们产生所有元素下标就行,那我们就用for循环产生0∽9的下标,接下来就可以进行访问了。
代码如下:
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("%d ", arr[i]);}return 0;
}
输出结果:

3.3 数组的输入
当我们明白了数组的访问,我们也就要根据需求,自己给数组输入想要的数据,如下:
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){scanf("%d", &arr[i]);}for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

4.一维数组在内存中的存储
经过前面知识的保障,接下来我们使用数组基本上没有什么障碍了。如果想要深入了解数组,我们要进一步了解数组在内存中存储地址。
依次打印数组元素的地址:
int main()
{int i = 0;int arr[10] = { 0 };for (i = 0; i < 10; i++){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}
输出结果如下:

从数组的输出结果分析,数组随着下标的增长,地址由小到大变化,并且发现每两个相邻的元素之间相差4(因为一个整形是4个字节)。故可以得出:数组在内存中是连续存放的。
5.sizeof计算数组元素个数
如果想要知道数组的个数,有没有方法计算数组元素个数吗?
可以用魔法度量仪 – sizeof。
sizeof是C语言中的关键字,是可以计算类型或者变量大小的,故sizeof也可以计算数组的大小。
比如:
int main()
{int arr[10] = { 0 };printf("%d\n", sizeof(arr));return 0;
}

这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。
我们又知道数组的所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的个数就能算出来。例如:
int main()
{int arr[10] = { 0 };printf("%d\n", sizeof(arr[0]));return 0;
}

可以计算出一个元素的长度为4。
接下来就能计算出数组的元素个数:
int main()
{int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);printf("%d\n", sz);return 0;
}

可以看到结果是:10,表示有10个元素。
因此以后代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,无论数组怎么变化,计算出的大小也就跟着变化。
