C语言--数组

C语言--数组 1.数组的概念数组是一组相同类型元素的集合即数组中存放的是一个或多个元素且元素的数据类型都是相同的。数组分为一维数组和多维数组。二维数组为常见的多维数组。2.一维数组的创建、初始化和使用2.1数组创建type arr_name[常量值]; //type 为数组元素的类型。可以是int、char等基本数据类型。也可以是自定义类型(这个以后会介绍) //arr_name为数组的名字最好起名有意义直观明了。 //[]中的常量值通常用来指明数组大小的根据实际需求指定即可。比如我们想定义一个数组存储某个班级20人的数学成绩为整数,如下int math_grade[20];2.2数组初始化和数组类型在数组创建时有时需要给定一些初始值我们称之为初始化。数组初始化一般使用大括号将数据存放在大括号中。//完全初始化 int arr[5] {1,2,3,4,5}; //不完全初始化 int arr2[6] {1};//第⼀个元素初始化为1剩余的元素默认初始化为0 //错误的初始化 - 初始化项太多 int arr3[3] {1, 2, 3, 4};数组也是有类型的其本身算是一种自定义类型。去掉数组名后留下的就是数组的类型。本小节上述代码的数据类型如下//完全初始化语句的数组类型 int [5] ; //不完全初始化的数组类型 int [6];2.3一维数组的使用学完一维数组的基本语法一维数组可以存放数据存放数据的目的是对数据的操作那么怎么使用一维数组C语言规定数组是有下标的下表从0开始 假设数组有n个元素最后⼀个元素的下标是n-1下标就相当于数组元素的编号如下int arr[10] {1,2,3,4,5,6,7,8,9,10};//对应的下标依次为0~9在C语⾔中数组的访问提供了⼀个操作符 [ ]这个操作符叫下标引用操作符。有了下标访问操作符我们就可以轻松的访问到数组的元素了比如我们访问下标为7的元素我们就可以使用 arr[7]想要访问下标是3的元素就可以使用arr[3],如下代码#include stdio.h int main() { int arr[10] {1,2,3,4,5,6,7,8,9,10}; printf(%d\n, arr[7]);//8 printf(%d\n, arr[3]);//4 return 0; }2.4 数组元素的打印接下来如果想要访问整个数组的内容那怎么办呢?只要我们产⽣数组所有元素的下标就可以了那我们使用for循环产生0~9的下标接下来使用下标访问就行了。#include stdio.h int main() { int arr[10] {1,2,3,4,5,6,7,8,9,10}; int i 0; //读者复制该代码自行打印 for(i0; i10; i) { printf(%d , arr[i]); } return 0; }2.5 数组的输入明白了数组的访问当然我们也根据需求自己给数组输⼊想要的数据。#include stdio.h int main() { int arr[10] {1,2,3,4,5,6,7,8,9,10}; int i 0; for(i0; i10; i) { //循环输入数据 scanf(%d, arr[i]); } for(i0; i10; i) { //循环打印数据 printf(%d , arr[i]); } return 0; }2.6 一维数组在内存中的存储有了前面的知识我们其实使用数组基本没有什么障碍了如果我们要深入了解数组我们最好能了解⼀下数组在内存中的存储。//依次打印数组元素的地址 #include stdio.h int main() { int arr[10] {1,2,3,4,5,6,7,8,9,10}; int i 0; for(i0; i10; i) { printf(arr[%d] %p\n , i, arr[i]);//%p为取地址占位符 } return 0; }读者可以复制上述代码自行运行打印从输出的结果我们分析数组随着下标的增长地址是由小到大变化的并且我们发现每两个相邻的元素之间相差4因为⼀个整型是4个字节。所以我们得出结论数组在内存中是连续存放的。这就为后期我们使用指针访问数组奠定了基础在后续指针系列的时候我们再讲这里暂且记住就行。2.7 sizeof计算数组元素的个数在遍历数组的时候我们经常想知道数组的元素个数那C语⾔中有办法使用程序计算数组元素个数吗有的那就是sizeofsizeof是C语言中的一个关键字是可以计算类型或者变量大小的其实sizeof也可以计算数组的总体大小。#include stido.h int main() { int arr[10] {0};//数组初始化 printf(%d\n, sizeof(arr));//输出的结果是40计算的是整个数组所占内存空间的总⼤⼩单位是字节。 return 0; }数组的总体大小知道了我们又知道数组中所有元素的数据类型都是相同的那只要计算出⼀个元素所占字节的个数一个元素的大小数组的元素个数就能算出来。这里我们选择第⼀个元素算大小就可以。#include stido.h int main() { int arr[10] {0}; printf(%d\n, sizeof(arr[0]));//计算⼀个元素的⼤⼩单位是字节 return 0; }接下来就能计算出数组的元素个数#include stido.h int main() { int arr[10] {0}; int sz sizeof(arr)/sizeof(arr[0]);//数组元素个数这⾥的结果是10表⽰数组有10个元素。 printf(%d\n, sz); return 0; }以后在代码中需要数组元素个数的地⽅就不用固定写死了使用上面的计算不管数组怎么变化计算出的大小也就随着变化了。3.二维数组的创建、初始化和使用3.1二维数组的创建//定义⼆维数组 type arr_name[常量值1][常量值2] //例如 int arr[3][5]; double data[2][8]; /* 3表⽰数组有3⾏ 5表⽰每⼀⾏有5个元素 int 表⽰数组的每个元素是整型类型 arr 是数组名可以根据⾃⼰的需要指定名字 data数组意思基本⼀致。 */3.2 二位数组的初始化在创建变量或者数组的时候给定⼀些初始值被称为初始化。那⼆维数组如何初始化呢像⼀维数组⼀样也是使用⼤括号初始化的。//不完全初始化 int arr1[3][5] {1,2}; int arr2[3][5] {0}; //完全初始化 int arr3[3][5] {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};//3行5列全都初始化 //按照⾏初始化 int arr4[3][5] {{1,2},{3,4},{5,6}}; //初始化时省略⾏但是不能省略列 int arr5[][5] {1,2,3}; int arr6[][5] {1,2,3,4,5,6,7}; int arr7[][5] {{1,2}, {3,4}, {5,6}};3.3 二维数组的使用当我们掌握了⼆维数组的创建和初始化那我们怎么使用⼆维数组呢其实⼆维数组访问也是使用下标的形式的⼆维数组是有行和列的只要锁定了行和列就能唯⼀锁定数组中的⼀个元素。C语言规定⼆维数组的行是从0开始的列也是从0开始的和线性代数中的矩阵差不多可以辅助记忆。#include stdio.h int main() { int arr[3][5] {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}; printf(%d\n, arr[2][4]);//下标为2的第3行和下标为4的第5列结果为7 return 0; }3.4 二维数组的输入和输出访问⼆维数组的单个元素我们知道了那如何访问整个⼆维数组呢其实我们只要能够按照⼀定的规律产生所有的行和列的数字就行以上⼀段代码中的arr数组为例行的选择范围是0~2列的取值范围是0~4所以我们可以借助循环实现生成所有的下标。#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(i0; i3; i) //产⽣⾏号 { int j 0; for(j0; j5; j) //产⽣列号 { scanf(%d, arr[i][j]); //输⼊数据 } } //输出 for(i0; i3; i) //产⽣⾏号 { int j 0; for(j0; j5; j) //产⽣列号 { printf(%d , arr[i][j]); //输出数据 } printf(\n); } return 0; }3.5 二维数组在内存中的存储像⼀维数组⼀样我们如果想研究⼆维数组在内存中的存储方式我们也是可以打印出数组所有元素的地址的。代码如下#include stdio.h int main() { //读者可以复制该代码自行运行打印 int arr[3][5] { 0 }; int i 0; int j 0; for (i 0; i 3; i) { for (j 0; j 5; j) { printf(arr[%d][%d] %p\n, i, j, arr[i][j]); } } return 0; }每⼀行内部的每个元素都是相邻的地址之间相差4个字节一个整型元素占4字节跨行位置处的两个元素如arr[0][4]和arr[1][0]之间也是差4个字节所以⼆维数组中的每个元素都是连续存放的。了解清楚⼆维数组在内存中的布局有利于我们后续使用指针来访问数组的学习。4. 数组相关练习//练习1多个字符从两端移动向中间汇聚 #include stdio.h int main() { char arr1[] welcome to bit...; char arr2[] #################; int left 0; int right strlen(arr1)-1; printf(%s\n, arr2); while(leftright) { Sleep(1000); arr2[left] arr1[left]; arr2[right] arr1[right]; left; right--; printf(%s\n, arr2); } retutn 0; }到这里就结束了如果读者有疑问可以评论区留言我会第一时间解答。