二维数组和指针
二维数组的逻辑结构为行列形式,但二维数组的存储结构为顺序形式。即二维数组中的数据元素在内存中的存储地址是连续的,故可以使用指针变量保存各个元素的地址值,进而可以间接访问二维数组中的各元素。
例如:
#define M 3 #define N 4 int a[M][N],*p,i,j;
上述语句定义了一个二维整型数组 a、整型指针变量 p 及整型变量 i 和 j。
访问二维数组中的元素,目前可有如下两种方法:
使用行列下标,直接访问,即 a[i][j] 形式。如 a[2][3] 表示 2 行 3 列数组元素。
通过地址,间接访问,即 *(*(a+i)+j) 形式。
M 行 N 列的二维数组 a,可以看成是含有 a[0]、a[1]、…、a[M-1] 等 M 个元素(M 行)的特殊一维数组,其每个元素 a[i](每行)又是一个含有 N 个元素(N 列)的一维数组。
由于 a[i] 可看成是“一维”数组 a的元素,而 a 可看成该“一维”数组的数组名。根据一维数组元素和一维数组名的关系可得:a[i] 等价于 *(a+i),均表示 i 行的首地址。
而 i 行又含有 N 个元素(N 列),即 a[i][0]、a[i][1]、a[i][2]、…、a[i][j]、…、a[i][N-1]。故
a[i] 表示i行对应一维数组的数组名。由于一维数组名 a[i] 即首元素 a[i][0] 的地址,即 a[i] 等价于
&a[i][0],用 <--> 表示等价,则有以下关系:
i 行首元素地址:a[i] + 0 <--> *(a + i) +0 <-->&a[i][0]
i 行 1 列元素地址:a[i] + 1 <--> *(a + i) +1<-->&a[i][1]
i 行 2 列元素地址:a[i] + 2 <--> *(a + i) +2<-->&a[i][2]
i 行 j 列元素地址:a[i] + j <--> *(a + i) + j <-->&a[i][j]
地址即指针,通过间接访问符 *,可以访问指针所指空间。即可得访问二维数组元素 a[i][j] 的几种等价形式如下。
0.0分
0 人评分
整除问题 (C语言代码)浏览:949 |
点我有惊喜!你懂得!浏览:1007 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:810 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:798 |
WU-字符串比较 (C++代码)浏览:824 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:729 |
理财计划 (C语言代码)浏览:494 |
A+B for Input-Output Practice (II) (C语言代码)浏览:622 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1288 |
【计算两点间的距离】 (C语言代码)浏览:875 |