一. 数组的概念
数组是⼀组相同类型元素的集合。
•
数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
•
数组中存放的多个数据,类型是相同的。
数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。
二.一维数组
2. 1⼀维数组的创建和初始化
2.1.1 数组创建
⼀维数组创建的基本语法如下:
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
•
type
指定的是数组中存放数据的类型,可以是:
char
、
short
、
int
、
float
等,也可以⾃
定义的类型
•
arr_name
指的是数组名的名字,这个名字根据实际情况,起的有意义就⾏。
•
[]
中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏。
2.1.2 数组的初始化
数组的初始化⼀般使⽤{},将数据放在⼤括号中。
2.1.3 数组的类型
数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型。
例:
2.2 ⼀维数组的使用
2.2.1 数组下标
C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下标就相当于数组元素的编号。
在C语⾔中数组的访问提供了⼀个操作符
[ ]
,这个操作符叫:下标引⽤操作符。
例:
2.3一维数组在内存中的存储
例:依次打印数组元素的地址
存放方式:
数组在内存中是连续存放的。
三.二维数组
3.1二维数组的创建
3.2 初始化
例:
arr2,arr3,arr4为不完全初始化 ;
arr9为完全初始化;
arr5,arr6为按照行初始化;
arr6,arr7初始化时省略⾏,但是不能省略列,根据数组元素的个数和常量值2可以计算出数组有几行
3.3二维数组的输入和输出
例1:
首先利用两个for循环输入数组元素,再利用两个for循环按照行进行打印,在循环输出语句中如何换行,每执行一次总的for循环,打印一个换行符,即可打印一个二维数组。
如何按列进行打印
将循环输出语句中 i 和 j 的判断条件互换,再将输出语句中的 i 和 j 互换,即可按列进行打印
3.4二维数组在内存中的存储
二维数组在内存中是连续存放的
四.c99中的变长数组
在C99标准之前,C语⾔在创建数组的时候,数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组⼤⼩。但这样
创建数组
就不够灵活,有时候数组⼤了浪费空间,有时候数组⼜⼩了不够⽤
的。
c99标准之后,支持了变长数组,这个时候允许数组的大小是变量,但是这种指定方式的数组是不能初始化的。
变⻓数组的根本特征,就是数组⻓度只有运⾏时才能确定,所以变⻓数组不能初始化。它的好处是程序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。有⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的⼤⼩⼀旦确定就不能再变化了。
vs2022不支持c99中的变长数组。
例:
int m=a+b;
int arr[m];
数组
arr
就是变⻓数组,因为它的⻓度取决于变量 m
的值,编译器没法事先确定,只有运⾏时才能知道 m
是多少。