}
}
三、通过建立一个行指针来引用二维数组(P179)(*指向由m个元素组成的一维数组的指针变量)
从逻辑上看二维数组是由相同类型的一维数组作为元素而构成的一维数组。
由于内存是一维空间,因此二维数组在内存中的表示是将二维空间上的数据依照某种顺序映射到内存,在C++语言中,是按从上到下、从左到右的次序(行序)来实现这种映射的。
所谓行指针变量就是用来存放“行”地址的变量,即行指针变量是指向一维数组的指针变量,其定义形式如下:
类型名(*指针变量名)[数组长度]
比较如下几个定义:
①intx;定义整型变量x;
②int*px;定义指向整型的指针变量px;
③intb[5];定义含有5个元素的整型数组b;
④int(*p)[5];定义指向含有5个元素的整型数组的指针变量p。
例如:
inta[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
int(*p)[5];
p=a;
这里p是一个指向含有5个整型元素的一维数组的指针变量;a是一个3行5列的二维数组,即每一行相当于一个含有5个元素的一维数组。
由于二维数组名是一个行指针类型的地址常量,则语句“p=a;”的作用就是将数组首地址赋给p,让行指针变量指向二维数组的a的首行,即一维数组a[0]。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
P,a
P+1
P+2
通过行指针可以表示二维数组的首地址、行地址、元素地址、元素等
当p指向a数组的开头时,可以通过以下形式来引用a[i][j]
*(p[i]+[j])与*(a[i]+[j])相对应
*(*(p+i)+j)与*(*(a+i)+j)相对应