商城网站开发设计,购物商城网站功能设计,神奇的工作室最新网站,青岛哪里有做网站公司的引言#xff1a;
小伙伴们#xff0c;我发现我正文更新的有些慢#xff0c;但相信我#xff0c;每一篇文章真的都很用心在写的#xff0c;哈哈#xff0c;在本篇博客当中我们将详细讲解一下C语言中的数组知识#xff0c;方便大家后续的使用#xff0c;有不会的也可以当…引言
小伙伴们我发现我正文更新的有些慢但相信我每一篇文章真的都很用心在写的哈哈在本篇博客当中我们将详细讲解一下C语言中的数组知识方便大家后续的使用有不会的也可以当作知识点补充哟那我们正文开始吧!
一.数组的概念
所谓数组就是一组相同类型元素的集合那么也就是说数组中存放的数据可以是一个或者多个但是数组元素不能为0并且在一个数组中存放的所有数据都是同一种数据类型。数组分为一维数组和多维数组多维数组中常见的是二维数组。
二.一维数组的创建和初始化
2.1数组创建
一维数组的基础语法如下代码所示
type arr_name[常量值];
存放在数组中的元素又被称为是数组的元素数组在创建时可以指定数组的大小和数组元素的类型针对上述代码还有以下需要注意的地方
1.type指的是数组中存放数据的类型可以是char,int,double,long long等也可以是自定义类型。
2.arr_name指的是数组名一般情况下自定义即可。
3.[]中的常量指定数组的大小这个大小1根据需求而定即可。
例如我们需要给定一个数组存储班里40人的数学成绩
double math[40];
因为成绩可能存在小数所以我们使用double类型的数组来定义那么既然是40人就给定40的大小即可。
2.2数组的初始化
有些时候我们需要给数组赋予一些初值我们该如何操作呢这便是数组的初始化初始化一般使用大括号将数据放在大括号之中。
int arr[5]{1,2,3,4,5};
//完全初始化
int arr[5]{1,2,3};
//不完全初始化
int arr[2]{1,2,3};
//错误的初始化-初始化太多
我们观察以上三种初始化方式我们发现第一种做到了完全初始化即数组中每个下标对应都有相应的初始值而第二种只初始化到第三个那么第四个和第五个数默认就是0了第三种数组初始化方式赋值又太多会导致程序报错。
2.3数组的类型
int arr1[10];
int arr2[12];
char ch[10];
数组也是有类型的数组算是一种自定义类型去掉数组名后剩下的就是数组的类型如上述代码所示arr1的数组类型是int [10];arr2的数组类型是int [12];ch的数组类型是char [10];
三.一位数组的使用
学会了数组的基本语法那么我们接下来介绍一维数组的基本使用我们先从下标这里说起
3.1数组下标
在C语言中数组是有下标的但是这里的下标并不是从1开始而是从0开始假如你有一个arr[10]的数组那么它的最大访问是arr[9],我们通过代码和图形来进一步解释。
int arr[10]{1,2,3,4,5,6,7,8,9,10}; 那么当我们访问arr[9]时它所对应的数字应该是10才对了如下述代码所示
#include stdio.h
int main()
{int arr[10]{1,2,3,4,5,6,7,8,9,10};printf(%d\n,arr[9]);printf(%d\n,arr[0]);return 0;
} 3.2一维数组的打印
如果我们想要访问整个数组那我们该如何操作上文说到我们可以通过下标来指向数组元素那么我们访问整个数组的方式也是遍历一遍所有的下标来进行打印如下代码所示
#include stdio.h
int main()
{int arr[10]{1,2,3,4,5,6,7,8,9,10};int lensizeof(arr)/sizeof(arr[0]);//使用数组名除以数组首元素的方式来获得数组的大小for(int i0;ilen;i){printf(%d ,arr[i]);}return 0;
} 3.3数组的输入
我们结合数组的打印来看既然数组需要通过下标来访问那么我们在输入时也需要根据下标对应的位置来进行输入如下代码所示
#include stdio.h
int main()
{int arr[10]{1,2,3,4,5,6,7,8,9,10};int lensizeof(arr)/sizeof(arr[0]);for(int i0;ilen;i){scanf(%d ,arr[i]);}for(int i0;ilen;i){printf(%d ,arr[i]);}return 0;
} 四.一维数组在数组中的存储
有了前面这些知识在使用一维数组解决简单问题基本就没有什么障碍了我们继续深入数组了解一下数组在内存中的存储如下代码所示依次打印数组在内存中的存储。
#include stdio.h
int main()
{int arr[10]{1,2,3,4,5,6,7,8,9,10};int lensizeof(arr)/sizeof(arr[0]);for(int i0;ilen;i){printf(arr[%d]%p\n,i,arr[i]);}return 0;
} 从输出的结果中我们不难发现数组随着下标的增长地址是从小到大变化的并且我们发现每两个相邻的元素之间相差4因为一个整形是四个字节所以我们得出结论数组在内存中是连续存放的这为将来的指针学习奠定了基础。
五.二维数组的创建
5.1二维数组的概念
前面学习的数组被称为一维数组数组的元素都是内置类型的我们如果把一维数组做为数组的元素那么它就是二维数组有点像套娃哈二维数组为元素的数组又是三维数组二维数组以上的数组统称为多维数组这里我们重点讲解二维数组即可。 5.2二维数组的创建
我们该如何定义二维数组呢语法如下所示
type arr_name[常量1][常量2];例如
int arr[3][5];
double data[2][5];
arr数组解释
1.3代表数组有3行
2.5代表每行有5个元素
3.int表示数组中每个元素都是整数类型
4.arr是数组名一般可自定义
data数组同理。
六.二维数组的初始化
在创建变量或者数组的时候给定一些初值叫做初始化二维数组也一样使用大括号初始化
6.1不完全初始化
int arr1[3][5]{1,2};
int arr2[3][5]{0}; 6.2完全初始化
int arr[3][5]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 6.3按行执行初始化
int arr[3][5]{{1,2},{3,4},{5,6}}; 6.4初始化时省略行但不能省略列
int arr1[][5]{1,2,3};
int arr2[][5]{1,2,3,4,5,6,7,8};
int arr7[][5]{{1,2},{3,4},{5,6}}; 七.二维数组的使用
7.1二维数组的下标
在C语言中规定了二维数组的行和列下标都是从0开始的如下代码所示
#include stdio.h
int main()
{int arr[2][3]{1,2,3,4,5,6};printf(%d %d,arr[0][0],arr[1][2]);return 0;
} 7.2二维数组的输入和输出
我们可以参照一维数组的打印通过下标来对二维数组进行输入和输出这里就需要借助到两个for循环如下代码所示
#include stdio.h
int main()
{int arr[3][5]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};int i0;for(int i0;i3;i){for(int j0;j5;j){scanf(%d,arr[i][j]);}}for(int i0;i3;i){for(int j0;j5;j){printf(%d ,arr[i][j]);}}return 0;
} 八.二维数组在内存中的存储
像一维数组一样二维数组在内存中也有自己独特的存储方式如下代码所示
#include stdio.h
int main()
{int arr[3][5]{0};for(int i0;i3;i){for(int j0;j5;j){printf(arr[%d][%d]%p\n,arr[i][j]);}}return 0;
} 九.数组练习——二分差找
掌握了前面的知识后我们就可以运用数组来解决问题了比如经典的二分查找也叫做折半查找大体上就是让你找一个数字输出它所在数组中的下标如下代码所示
#include stdio.h
int main()
{int arr[]{1,2,3,4,5,6,7,8,9,10};int left0;int rightsizeof(arr)/sizeof(arr[0])-1;int key7;//要查找的数字int mid0;//记录中间元素的下标int find0;while(leftright){mid(leftright)/2;if(arr[mid]key){rightmid-1;}else if(arr[mid]key){leftmid1;}else{find1;break;}}if(find1){printf(%d\n,mid);}else{printf(没找到);}return 0;
} 十.小结
在本篇博客中我们介绍了一维数组和二维数组的创建初始化等初步使用并在最后补充了一下初步的二分查找希望本篇博客对你掌握二维数组有所帮助谢谢您的点赞。