本小节知识点:
1、数组名访问数组元素
2、普通指针访问二位数组
3、指向二维数组的指针
4、指针数组和二维数组指针变量的区别
=========================================================================
1、数组名访问数组元素
多维数组的地址
int a[3][4]={{1,3,5,7}, {9,11,13,15},{17,19,21,23}};
a代表第0行首地址
a+1代表第1行首地址
a+2代表第2行首地址
a+i代表行号为i的行首地址(按行变化)
a[0]代表a[0][0]的地址
a[0]+1代表a[0][1]的地址
a[0]+2代表a[0][2]的地址
a[0]+3代表a[0][3]的地址
2、普通指针访问二维数组
3、指向二维数组的指针
二维数组指针变量说明的
一般形式为:
类型说明符 (*指针变量名)[长度]
其中:
1> “类型说明符”为所指数组的数据类型。
2> “*”表示其后的变量是指针类型。 “
3> 长度”表示二维数组 分解为多个一维数组时, 一维数组的长度,也就是二维数组的列数。
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4];
p=a; p++;
// 该语句是定义一个数组指针, 指向含4个元素的一维数组。 //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
// 该语句执行过后, 也就是p=p+1; p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针, 亦称行指针。
4、指针数组和二维数组指针变量的区别
应该注意指针数组和二维数组指针变量的区别。
这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的。
二维数组指针变量是单个的变量,其一般形式中"(*指针变量名)"两边的括号不可少。
而指针数组类型表示的 是多个指针(一组有序指针)在一般形式中"*指针数组名"两边不能有括号。
例如:
int (*p)[3]; 表示一个指向二维数组的指针变量。该二维数组的列数为3或分解为一维数组的长度为3。
int *p[3] 表示p是一个指针数组,有三个下标变量p[0],p[1],p[2]均为指针变量。