一、初始化
必须指定列的数量,行的数量可以不定义
1.分行进行初始化
定义一个2×3的数组
int a[2][3]={{1,2,3},{4,5,6}};
2.不分行初始化
定义一个2×3的数组
int a[2][3]={1,2,3,4,5,6};
3.部分数组元素初始化
int a[2][3]={{1,2},{4}};
//使用static定义,未赋值元素初始化为0
static a[2][3]={{1,2},{4}};
4.可省略第一维定义
int a[][3]={1,2,3,4,5,6};
二、二维数组的指针
以一个3×4的二维数组brr为例
1 | 2 | 3 | 4 |
---|---|---|---|
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
1.brr:
类型为:
int (*p)[4]//指向首行的地址
数组指针: int (p)[4]
p在这里是一个指向整型数组的指针,要和指针数组进行区分。数组指针的p有括号的包裹,即其重点在于是个指针,数组起修饰作用。
指针数组:int *p[4]
没有括号包裹,重点在于其是个数组,保存指针的数组
2.brr+1:
类型为:
int (*p)[4]//指向下一行的地址
3.brr[0]:
类型为:
int *//brr中第0行元素的首地址
4.brr[0]+1:
类型为:
int *//brr中第0行元素首地址加一,即首行第二个元素地址
5.brr[0][0]:
类型为:
int//brr中首行首元素值
若要指向二维数组,应为int **p=brr