二维数组
1.数组常识
//3*2的数组a
int a[3][2];
a;//代表数组首行地址,一般用a[0][0]的地址表示
&a;//代表整个数组的地址,一般用a[0][0]地址表示
a[i];//代表了第i行起始元素的地址
&a[i];//代表了第i行的地址,一般用a[i][0]的地址表示
a[i]+j;//代表了第i行第j个元素地址,a[i]就是j==0的情况
&a[i][j];//代表了第i行第j个元素的地址
a[i][j];//代表了第i行第j个元素
//初始化
int a[3][2]={0};//所有数组元素均为0
int a[3][2]={1,2,3,4,5,6};//常规的赋值方法
int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
char c[3][8];//定义
char c[3][8]={{"apple"},{"orange"},{"banana"}};
char c[][8]={{"apple"},{"orange"},{"banana"}};//可省略行
char c[3][8]={"apple","orange","banana"};
//for赋值
for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
//指针指向数组,给指针值即赋给数组。
2.指针
/定义
//数组指针是指针
//指针数组是数组
int* p;//定义了一个指向整形数据的指针变量
char *p;//定义了一个指向字符型数据的指针变量
char (*p)[3];//定义了一个数组指针,指向了一个长度为3的一维字符数组
char* (*p)[3];//定义了一个数组指针,指向了一个二维数组 (3指列数)
char* p[3];//指针数组,不是一个指针,它是一个数组,里面存放了指针
// 赋值
int a = 5;
&a;//会返回‘一个指向a内存的’一个指针
int* p = &a;//p的类型为int*,&a也返回一个int*的指针,左右两边类型相同
//意义
*a;//代表数组a首元素地址也就是a[0]或者&a[0][0]
*(a+i);//代表了第i行首元素的地址,*a是i=0的情况
*(a+i)+j;//代表了第i行j个元素的地址
**a;//代表a的首元素的值也就是a[0][0]
*(*(a+i)+j);//代表了第i行第j个元素