数组的简单介绍

1、数组的概念

数组是一组相同类型元素的集合    数组分为一维数组和多维数组,常见的多维数组是二维数组

***数组中存放的几个数据 其数据类型是相同的

***数组元素个数为一个或多个 不能为0

2、数组类型

数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型 如int arr[10]去掉数组名arr则数组类型为int [10]

数组中存放数据的类型,常见的有char、int、short、float等和自定义类型

如:int arr[9]为整型数组 char arr[20]为字符数组

3、一维数组的创建和初始化

(1)一维数组的格式:type arr_name[常量值];

其中type为数组类型,即上文介绍的int char 等。 arr_name为数组名  []中的常量值用来指定数组大小,根据实际需求决定。

***数组在创建的时候可以指定数组的元素类型和数组大小

如创建一个整型数组来存放10个人的成绩 int arr[10]

(2)初始化:在创建数组时给一些初始值 如上例:int arr[10]={95,84,62,76,83,52,98,66,89,74} 

初始化包括完全初始化和不完全初始化

完全初始化即数组容量有多少,则初始值给多少

不完全初始化 如int arr[5]={2,3}  则第一个元素为2,第二个元素为3,余下没有给初值的元素默认为0

***当所给元素数量大于数组容量时 即错误初始化

学习了数组的创建,那么接下来就要学如何使用数组

4、一维数组的使用

(1)下标  数组下标时从0开始的

如 int arr[10]={1,2,3,4,5,6,7,8,9,10}

                       0 1 2 3 4 5 6 7 8 9//元素1对应的下标即为0以此类推

下标操作引用符[]  想要访问下标为7的元素就arr[7]得到即为数字8 如图

(2)打印数组内容

如果想要访问一个数组中的全部内容,只要for循环遍历后打印每个元素就行了

(3)输入

现在我们已经了解了数组内容的输出 那么可以自己输入数组的内容吗

当然可以! 同样的scanf函数 例子如下:

在这里scanf的用法与前面基本相同,只不过为了输入数组的全部内容需要使用循环多次输入

(4)存储

***一维数组在内存中是连续存放的

一个整型为四个字节  从图中打印每个元素的地址我们发现十六进制下每个元素之间相差4 从而得出一维数组在内存中是连续存放的

补充:若要计算数组大小  使用到一个关键字——sizeof   计算结果为所占内存空间大小 单位为字节

那么通过sizeof我们又有了一种计算元素个数的方法———数组所占内存大小/任意一个元素所占内存大小  如:int num = sizeof(arr)/sizeof(arr[0]);  那么num即为数组元素个数

***字符数组中sizeof和strlen的区别

我们任给两个字符数组

如 char arr1[]={"abcdegf"};

    char arr2[]={'a','b','c','d','e','f','g'};

对于sizeof 其求的是数组大小 而arr1中字符串的结束标志为“\0” 因此算上\0其有效元素个数为8,而1个字符占1个字节  故结果为8  而arr2为单纯的七个字符 结果为7

我们再来看strlen的结果

strlen求的是字符串长度 遇见\0停止  而arr0没有\0 结果是个随机数

注意区别!!!

5、二维数组的创建以及初始化

(1)二维数组的格式:type arr_name[ 常量值 1 ][ 常量值 2 ]
         举例:int arr1[5][6];     char arr[10][2];
常量值1表示行  ;常量值2表示1行有几个元素。  其余介绍同一维数组
(2)初始化
         *完全初始化
        同一维数组一样  给定一系列数后,按照从左到右从上到下排列 行和列数根据两个常量值决定
        如 int arr[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
        则其排列为     1    2     3     4     5               3行 每行五个元素
                                 6    7     8     9     10
                                 11  12   13   14    15
        那么根据其排列也能确定每个元素的“坐标“  ***注意行和列编号都是从0开始的
        那么 比如8就是arr[[1][2]  14就是arr[2][3]
        *不完全初始化
        如:int arr[3][5]={1,2,3,4}; 排列好后剩余位置全初始化为0
        当然若 int arr4[ 3 ][ 5 ] = {{ 1 , 2 },{ 3 , 4 },{ 5 , 6 }}; 里面每个大括号表示一行的内容 即1和2分别为第一            行第一个和第二个元素,后面类推 其余元素为0
        ***初始化时行可以省略,列不可以省略
        如:int arr[][5]={1,2,3};
6、二维数组的使用
输入输出: scanf printf for循环
二维数组在内存中的存储
参照一维数组的分析 我们发现二维数组在内存中也是连续存放的
***关于二维数组的一些应用我们以后介绍
7、变长数组

通过上面我们发现数组在创建时只能使用常量或常量表达式来指定数组大小  这种语法很不方便
那么可不可以用变量来指定数组大小呢
这里我们引入变长数组  其可以允许我们使用变量指定数组大小
如:int n=a+b;
       int arr[n];
***变长数组由于在运行时才能确定数组长度,因此变长数组不能初始化
我们来看一下变长数组的优越性(由于在VS2022版本下不支持变长数组 这里用DevC++演示
我们可以发现想要数组长度多少 只需输入自己想要的长度 以及对应的数字 即可便捷地改变数组长度
8、简单应用
通过以上数组内容的简单介绍 我们来写一个经典的二分查找小程序
对于一个范围的数字 如果我们要精准地猜中其中一个数字 那么最简单易想的莫过于暴力遍历,每个数都检查一遍  
那么采用二分查找即折半查找可大大增加效率  ***这里只适用于升序或降序排列的数
此处我们给一个数组int arr[]={1,2,3,4,5,6,7,8,9,10}; 通过二分查找其中的一个数 在数组中,通过下标来查找对应元素较为简单 那么我们这里考虑
不过 若left和right比较大时可能会超出整型int范围  此时可以考虑mid =left+(right-left)/2
  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值