1.数组的概念
数组是一组相同类型元素的集合;
- 数组中存放1个或者多个数据,但数组元素个数不能为0;
- 数组存放多个数据,类型是相同的。
数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。
2.一维数组的创建和初始化
2.1数组的创建
一维数组创建的基本语法如下:
type arr_name[常量值];存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
- type指定的是数组中存放数据的类型,可以是:char,short,int,float等,也可以自定义的类型。
- arr_name指的是数组的名字,这个名字根据实际情况,起的有意义就行。
- [ ]中的常量值是用来指定数组的大小的,这个数组的大小是根据实际需求指定就行。
int math[25]; char ch[23]; double score[30];2.2数组的初始化
数组在创建时,需要给给定一些初始值,这种就被成为初始化。
数组的初始化一般使用大括号,将数据放在大括号中,使用逗号隔开。
数组如果进行了初始化,数组的大小是可以省略的。
2.3数组的类型
int arr[10] = { 1,2,3,4 };
//int 是数组中的元素的类型
//数组arr的类型是int [10]
3.一维数组的使用
学习了一维数组的基本语法,一维数组可以存放数据,存放数据的目的是对数据的操作
3.1数组的下标
从语言规定数组是有下标的,下表是从0开始的,假设数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下:
int arr[10]={1,2,3,4,5,6,7,8,9,10};C语言中数组的访问提供了一个操作符[ ],这个操作符叫:下标引用操作符。
有了下标引用操作符,我们就可以轻松的访问到数组的元素,比如我们访问下标为7的元素,我们就可以使用arr[7],想要访问下标是3的元素,就可以使用arr[3]。
3.2数组元素的打印
3.3数组的输入
![]()
4.一维数组在内存中的存储
打印出来的地址是16进制的
说明:
- 数组的元素在内存中是连续存放的
- 随着数组下标的增长,地址是由小(低)到大(高)变化的
5.sizeof计算数组元素个数
sizeof 中C语言是一个关键字,是可以计算类型或者变量大小的,其实sizeof 也可以计算数组的大小。
6.二维数组的创建
6.1二维数组的概念
前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组做为数组的元素,这时候就是二维数组,二维数组作为数组的元素的数组被称为三维数组,二维数组以上的数组统称为多维数组
二维数组是存放一维数组的数组
6.2 二维数组的创建
语法如下:
type arr_name[常量1][常量2]; 例如: int arr[3][5]; double date[2][8];解释:
- 3表示数组有3行
- 5表示每一行有5个元素
- arr是数组的每个元素是整型类型
- arr是数组名,可以根据自己的需要指定名
(date数组意思基本一致)
7.二维数组的初始化
像一维数组一样,也是使用大括号初始化的。
7.1不完全初始化
int arr1[3][5]={1,2}; int arr2[3][5]={0};7.2 完全初始化
int arr3[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};7.3 按照行初始化
int arr4[3][5]={{1,2},{3,4},{5,6}};7.4初始化时省略行,但不能省略列
8.二维数组的使用
8.1二维数组的下标
二维数组访问也是使用下标的形式,二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的一个元素。
C语言规定,二维数组的行是从0开始的,列也是从0开始的,如下所示:
int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };8.2二维数组的输入和输出
9.二维数组在内存中的存储
二维数组内存中也是连续存储的
10.C99中的变长数组
在C99标准之前,c语言在创建数组的时候,数组大小的指定只能使用常量,常量表达式,或者如果我们初始化数据的话,可以省略数组的大小。
int arr1[10]; int arr2[3+5]; int arr3[]={1,2,3};这样的语法限制,让我们创建数组就不灵活了,有时候数组大了浪费空间,有时候数组又小了不够用。
C99中给一个变长数组的新特性,允许我们可以使用变量指定数组的大小。
VS中msvs默认不支持变长数组的
我们可以使用gcc测试,也可以使用clang测试,devC++中使用的就是gcc
变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化。变长数组的大小是可以使用变量来指定的,在运行的时候,根据变量的大小来指定数组元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了。
11.数组的练习
练习1.多个字符从两端移动,向中间汇聚
练习2.二分查找
题目:给定一个升序的整型数组,在这个数组中找到指定的值n,找到了就打印n的下标,找不到就打印“找不到”。