数组就是指一群元素的集合
1.一维数组
一种相同类型元素的集合称为数组,如字符数组,整形数组等
(1)一维数组的创建:
创建方式:
type_t arr_name [const_n];
//type_t 数组元素类型,数组类型(type)
//arr_name 数组名称(name)
//const_n 常量(const) n 数组的长度,大小
例如:int arr[10];这就创建了一个10个元素类型为整形的,名称为的arr数组;
//正确创建:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//数组长度给定
int arr[] = {1,2,3,4,5};//数组长度不定,由括号内元素个数决定
//错误创建:
int n = 10;
int arr[n];//创建一个变量,用变量作为数组长度大小
//在C99标准之前,这种创建方式是错误的,数组长度只能给定常量
//在C99标准之后,这种创建方式才被引入,同时这种数组被称为变长数组
//注意:在VS编译器下不支持这种创建方式,在gcc编译器下支持
(2)一维数组的初始化:
A.整形一维数组:
//按照元素个数赋值情况分:完全初始化和不完全初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
int arr[10] = {1,2,3};//不完全初始化,里面赋值个数字但不全赋值,剩余的空间都被赋值为0
可见整形一维数组初始化方式分为完全初始化和不完全初始化,不完全初始化所剩下的空间默认赋值为0。
B.字符一维数组:
字符数组的两种存储方式:
//存储字符串
char arr[4]="abcd";
//存储字符
char arr[4]={'a','b','c','d'};
同时初始化方式按照分为完全初始化和不完全初始化,不完全初始化所剩下的空间默认赋值为"\0"。
(3)一维数组在内存中的存储方式:
可见,同一行中地址是连续的,递增的,相邻差4个字节(相差一个int,相差大小由数组类型决定,int类型就是4个字节)。
2.二维数组:
多行多列的相同类型的一类元素
(1)二维数组的创建:
创建方式:
type_t arr_name[const_n][const_m];
//type_t 数组元素类型,数组类型(type)
//arr_name 数组名称(name)
//const_n 常量(const) n 数组行的长度,大小
//const_m 常量(const) m 数组列的长度,大小
//数组的总长度,大小:n*m
在创建二维数组的时候:行的长度可以省略,但是列的长度不可以省略
int arr[][4]={1,2,3,4,5};//这个数组4列,1234填充完第一列行后接着填充下一行。
int arr[5][]={1,2,3,4,5,6,7};//这个数组不知道有多少列,也就意味着一行不知道有多少个元素,那么一行就可以填充无数元素,就构不成二维数组。
(2)二维数组的初始化:
下面以整型数组为例子:
//按照元素赋值个数情况分:完全初始化和不完全初始化
int arr[2][3] = {1,2,3,4,5,6};//完全初始化
int arr[2][3] = {1,2,3};//不完全初始化,剩余的赋值为0
//按照赋值方式分:纯大括号和大括号里加大括号
int arr[2][3] = {1,2,3,4,5,6};//纯大括号,数值填完一行继续填充下一行
int arr[2][3] = {{1,2,3},{4,5,6}};//里面第一个大括号表示第一行的数,第二个表示第二行的数
//类似的,在大括号的里面可以不完全初始化,在大括号的大括号里面也可以不完全初始化,如下:
int arr[3][3] = {{1,2,3},{2,3}};
(3)二维数组在内存中的存储方式:
可见,同一行中地址是连续的,递增的,相邻差4个字节,而且下一行的地址和上一行的地址也是连续的,也差4个字节。
此外,其实可以将每一行数组看成一个数组,就如int arr[3][3];,我们把arr[0],arr[1],arr[2]看一个数组,就会得到结果arr[0][0]是指数组arr[0]中的第一个元素,同理arr[0][1]就是arr[0]这个数组中的第二个元素。
3.变长数组
变长数组的创建如下
int n = 10;
int arr[n];//允许数组长度可以为变量
然而,这种创建方式在C99标准之前,是错误的,数组长度只能是常量,宏定义#define定义一个常量创建数组,是可行,后在C99标准中在支持这种数组长度用变量创建的方式,方便了我们使用变量得到自己所需长度的数组
值得注意的是,变长数组不能被初始化,如果初始化了,那么在编译的阶段就会确定数组的大小,而数组的大小是在程序运行时确定,所以不允许初始化;因为变长数组空间大小可变的,当放入指定数量的元素时,就限定死了大小不能小于赋值的数量,就破坏了变长数组的特性。