C:07---数组
一、数组定义
- 数组大小可以使用宏定义
- 数组大小不能使用变量,可以使用常量
二、数组注意事项
- int num[5]={1,2,3}; //未初始化的都是0
- int num[]={1,2,3}; //数组大小自动设置为3
- int num[5]; //都是垃圾值
- int num[5]={}; //编译器报错
- 使用常量定义数组
三、二维数字
- int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //自动是被是int a[3][4];
- int a[3][]={1,2,3,4,5,6,7,8,9,10,11,12}; //程序报错
- int a[3][4]={1,2,3}; //缺省处用0补齐
- int a[3][4]={{1,2},{3,4,5,6},{7,8,9,10}}; //缺省处用0补齐
- int a[3][4]={{,2},{3,4,5,6},{7,8,9,10}}; //错误,逗号前面不能缺省
四、数组与指针的关系
一维数组:
- 数组名就是数组的首地址(数组名相当于指针)
二维数组:
- 数组名相当于第一个元素的地址(数组名相当于指针)
- 每一行的首地址就等于二维数组的一维下标
int a[2][3]={{1,2,3},{4,5,6}};
- a==&a[0][0]==a[0]==&a[0]
- a+1==&a[1][0]==a[1]==&a[1] //a+1相当于加了一行的地址
- &a[1][1]==*(a+1)+1
- ,&a[1]==*(a+1)
- 若二维下标超界,就会向下一行去取值
- 若二维下标低于0,就会向前一行去取值
- *a[1]==a[1][0]
- *a[1]+1==*(a[1]+1)==a[1][1]
- 遍历二维数组
五、指针数组、数组指针
- 指针数组:是一个数组,里面都是指针
- 数组指针:是一个指针,指向于数组
数组指针
- 一维数组的指针
- 二维数组的指针(列数必须与定义的数组列数相同)
- int (*p)[3]=a; //正确
- int *p=&a[0][0]; //错误的
指针数组(数组明前要加*号,并且数组的大小)
- 一个数组,里面存放的是指针