一、谈谈你对数组的理解
数组是一种构造数据类型。不同于指针,数组是在栈上静态分配空间,空间上是连续的,因为是静态分配空间,所以数组空间在定义时就分配空间,空间大小不能改变,造成空间利用率低的问题,为解决这一问题引入了可变长数组和柔性数组。数组按照维度可分为有一维数组、二维数组、三维数组等数组,数组的使用要注意 数组的定义、数组的初始化、数组名和数组地址所代表的的含义、数组名在当实参时,形参的类型,注意类型兼容问题。区分指针数组、数组指针、的使用和应用场景,最后还要区分指针和数组在空间分配、访问效率、安全性以及函数形参等方面的区别和联系。
二、如何使用数组
1、定义数组大小问题
C89标准:定义必须确定数组长度
int a [100];
静态分配不灵活,怎么解决数组长度不灵活的问题———可变长数组(C99标准中)&柔性数组
(1)可变长数组
实现原理:用变量定义数组大小
并不能真正解决数组长度问题 ,同时如果变量没有初始化,会随机赋值,当变量为负时,会出错
(2)柔性数组
2、一维数组 由元素组成,组成单位是元素
int a[];
a | 指针常量,数组名不能自加自减,保存的是数组首元素地址,步长为单个元素步长 |
&a | 对数组名取地址表示数组的地址,步长为整个数组元素所占大小的步长 |
*(&a) == a | 对一维数组的地址取值等于数组首元素的地址 |
3、二维数组 可以看作由多个一维数组组成,组成单位是一维数组
int aa[][];