本章内容1.数组1数组的概念数组就是一组相同类型元素的集合从这个概念可以得到两个有价值的信息数组中存放的是1个或多个数据但是数组元素个数不能为0数组中存放的多个数据类型必须是相同的比如说我这个数组要存放整型数据那么每个元素的类型都是整型。2一维数组的创建、初始化、类型、使用一维数组创建的基本语法如下type arr_name[常量值];存放在数组中的值被称为数组元素数组在创建的时候可以指定数组的大小和数组的元素类型type指定的是数组中存放数据的类型可以是char、short、int、float等等也可以是自定义的类型arr_name指的是数组的名字这个名字根据实际情况起的有意义就好比如说我要创建一个数组来存放一个班级学生的年龄可以把这个数组名字起为age[ ]中的常量值就是用来指定数组大小的这个数组的大小是根据实际需求来指定就行比如我要存储一个班20个学生的数学成绩就可以这样创建数组float math[20];因为成绩不可能都是整数比如会有85.5分等等那么就可以创建一个浮点型类型的数组上面就是一维数组创建的语法要求以及一些注意事项。数组的初始化有时候我们创建好数组的时候需要给定一些初始值这种就是数组的初始化数组的初始化一般是使用大括号将数据放在大括号中如下//完全初始化int arr[5] {1,2,3,4,5}; //这个数组的大小是可以省略的也就是说int arr[5] {1,2,3,4,5};是等价于int arr[ ] {1,2,3,4,5};的因为你初始化了5个元素前面不指定大小会默认为你这个数组大小是5//不完全初始化int arr[5] {1}; //第一个元素初始化为1剩余的元素会被默认初始化为0//不完全初始化的数组就不要省略数组的大小了因为一但省略数组的大小是会随着初始化的个数发生改变//错误初始化int arr[5] {1,2,3,4,5,6};//初始化项太多超出数组指定的元素的个数数组的类型数组也是有类型的数组算是一种自定义的类型去掉数组名留下的就是数组的类型如下int arr1[10]; //arr1数组的类型是int [10]char arr2[20]; //arr2数组的类型是char [20]float arr3[26]; //arr3数组的类型是float [26]一维数组的使用讲完了一维数组的基本语法一维数组可以存放数据而存放数据的目的就是对数据进行操作那么使用一维数组就需要使用数组下标通过数组下标就可以对数据进行操作。数组下标在C语言中规定数组是有下标的下标是从0开始的假设数组有n个元素那么最后一个元素的下标是n-1下标就相当于是数组元素的编号如下int arr[10] {1,2,3,4,5,6,7,8,9,10};数组12345678910下标0123456789在C语言中数组的访问提供了一个操作符[ ]下标引用操作符有了下标引用操作符我们就可以轻松访问到数组的元素了比如我们访问下标为7的元素就可以使用arr[7]如下代码数组元素的打印如果我们想要访问整个数组的内容就可以使用循环的方式产生数组所有元素的下标再使用下标引用操作符就可以访问到整个数组的内容了代码如下数组的输入了解了数组的访问我们也可以根据自己的需求自己给数组输入想要的数据如下代码3一维数组在内存中的存储如果想要更深入的了解数组那我们就要了解一下数组在内存中的存储是怎样的代码如下:那么随着下标的增长地址是由小变大的每两个相邻元素之间差4因为一个整形是4个字节所以得出一个结论就是数组在内存中是连续存放的这也为后期讲解指针的时候使用指针访问数组奠定了基础。4sizeof计算数组元素个数在我们遍历数组的时候如果想要知道数组的元素个数就可以通过sizeof这个关键字用来计算类型或者变量大小的其实sizeof也可以计算数组的大小代码如下那我既然指定了数组元素大小为10一眼不就看出数组大小为什么还要求它呢是为了之后在写代码的时候需要数组元素个数的地方就不用固定写死了使用上面这个计算方法不管数组怎么变化计算出的大小也就会随之变化。5二维数组的创建、初始化、类型、使用前面讲到的都是一维数组数组的元素都是内置类型的如果我们把一维数组作为数组的元素这时候就是二维数组当然也有三维数组不过基本上不怎么用我们也把二维数组以上的数组称为多维数组二维数组的创建二维数组创建的语法如下type arr[常量值1][常量值2];例如int arr[3][5];3表示数组有3行。5表示数组的每一行有5个元素int表示数组的每个元素都是整形类型的arr是数组名可以根据实际需要指定名字起的有意义就好二维数组的初始化//完全初始化int arr[3][5] {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};123452345634567//不完全初始化int arr[3][5] {1,2,3};123000000000000不完全初始化会把初始化的一些元素先按照行初始化剩余的元素默认初始化为0若一个元素都没有初始化那么整个二维数组的元素都会被默认初始化为0//按照行初始化int arr[3][5] {{1,2},{3,4},{5,6}}120003400056000按照行初始化的元素也是需要用大括号括起来的{1,2}表示第一行只初始化头两个元素后面3个元素默认初始化为0那么{3,4}就是以第1行为标准初始化第1行{5,6}则是同样的标准初始化第3行。//初始化时可以省略行但是不能省略列int arr[][5] {1,2,3};12300int arr[][5] {1,2,3,4,5,6,7};1234567000int arr[][5] {{1,2},{3,4},{5,6}};120003400056000不能省略列的原因是就不能知道一行放几个元素那我数据要怎么存放呢所以说二维数组初始化是可以省略行的但不能省略列省略行之后就需要根据初始化的元素来判断该二维数组是几行几列的。二维数组的使用二维数组的下标二维数组的访问也是通过使用下标的形式的二维数组是有行和列的只要锁定了行和列就能唯一锁定数组中的一个元素而在C语言中规定二维数组的行是从0开始的列也是从0开始的如下所示int arr[3][5] {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};下标:01234012345123456234567比如我们想要知道2行4列的元素arr[2][4]就可以知道这个元素是7二维数组的输入和输出访问二维数组单个元素我们知道了那我们访问整个二维数组也就没有问题了只需要通过循环的方式产生行号和列号以上面代码为例行号的范围是0~2列号的范围是0~4具体实现代码如下6二维数组在内存中的存储与一维数组一样我们想要知道二维数组在内存中的存储方式就可以通过打印数组所有元素的地址来观察代码如下通过观察地址发现不但每一行的内部相邻的元素相差4个字节因为一个整形是4个字节跨行位置处相邻的元素也是相差4个字节所以二维数组的每个元素也都是连续存在的如下表所示7C99中的变长数组在C99标准之前C语言创建数组的时候数组大小的指定只能使用常量或者是常量表达式这样的语法限制导致我们创建数组的时候不够灵活有时候数组创建大了会浪费空间创建小了又不够用而变长数组就允许我们使用变量指定数组的大小int n 0scanf(%d,n);int arr[n];上面这个示例数组arr就是一个变长数组它的长度取决于变量n的值编译器是没有办法事先确定只有在运行的时候才知道n的值是多少所以变长数组的根本特征是数组的大小只有在运行的时候才能确定所以变长数组是不能进行初始化的而在运行时一但确定数组的大小数组的大小就不能再变化了在VS2026上是不支持C99变长数组这个语法所以就需要添加新的配置如下这里直接使用编译器是会报错的先在开始菜单里搜索Visual Studio Installer只要下载了VS2022或者VS2026就会有这样就配置完成了也就可以使用变长数组了2.总结本篇文章内容就分享到这里希望道友们多多支持下篇应该会进行函数章节内容的讲解那我们就下篇文章再见