一、数组的概念:
数组其实就是一类相同的元素的集合:从这个概念我们就可以发现两个有价值的信息:
a、数组中存放的是一个或者多个元素,但是数组元素的个数不可以是0
在标准的C语言中这个不是合法的普通数组的定义,因为这里表示的是这个数组中一个元素都没有
而数组本身就是“用来存放一组同类型元素的连续空间”,所以普通数组至少应该存放一个元素
b、数组中存放很多数据,多维数字一般比较多见的是二维数组。
二、一维数组的创建:
下面这张图就是一维数组的基本格式:
后面的就是数组的名字,这是可以自己命名的,[]中的常量是用来指定数组的大小的,这个数组的大小是可以根据实际的情况进行指定的。
三、数组的初始化:
有的时候数组在创建的时候需要一些初始化,那么数组是如何进行初始化的,数组的初始化一般使用的是大括号,将数组放在大括号中:
四、数组的类型:
这里我们只需要知道:去掉数组的名字,剩下的就是数组的类型。
五、一维数组的使用:
C语言规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后一个元素的下标为n-1,下标就相当于数组元素的编号。
数组是通过下标访问到具体的数据的,下标也称之为索引。
注意:数组名是地址,但是数组元素不是,所以在输入数组元素的时候需要加上取地址符号。
字符数组存放多个字符的时候,如果末尾有/0,就可以当做是字符串。
注意:这里并没有'\0',而是数组为我们加上了'\0',关键就在于arr的大小显示的是10,而初始化中只给出了4个字符,C标准规定:当大括号初始化列表中元素的大小小于数组中元素的个数的时候,剩余部分隐式的按照“具有静态存储对象”规定初始化,也就是全部置为0。而对于char而言,这个0就是\0。
当我们对数组进行初始化的时候,大小是可以省略的,大小是根据数组的实际内容进行分析。
结论:一维数组中的所有元素在内存中是连续一次存放的,随着下标的增长地址也是逐渐的增大的
六、sizeof计算元素的个数:
下面就是sizeof计算元素个数的简单运用:
七、二维数组的创建:
(1)概念:前面学习的数组叫做一维数组,数组的元素都是有内置类型的,如果我们将一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组叫做三维数组,二维数组以上的数组统称为多维数组。
二维数组的定义如下:
(2)二维数组的初始化:
通过上述的这种方式我们就可以直观的看到里面的每一个元素是如何进行存放的
注意:我们之前有提到一维数组是可以不写大小的,但是对于二维数组而言,行是可以省略的,但是列是不可以省略的。
(3)二维数组的存储:
从输出的结果可以看出,每一行的两个元素都是相邻的,地址之间相差4个字节,跨行位置处的连个字符也是相差4个字节,所以二维数组中的每一个元素都是连续存放的。
这里有一个问题:我们是否可以使用变量定义二维数组?
在C99之前,数组的大小可以通过常量或者常量表达式指定,在C99标准之后,引入了一个变长数组的概念,允许我们使用变量指定数组的大小
变长数组的基本特征:数组的长只有在运行的时候才可以确定,所以变长数组不可以进行初始化,它的好处就是程序员不需要再开发的时候,随意的为数组指定一个估计的长度,程序可以运行的时候为数组分配精确的长度。
但是我们需要注意的是vs默认是不支持变长数组的,所以此时我们就需要使用clang作为底层的编译器。