赞
踩
如何操作⼆维数组?
要更清楚地了解⼆维数组的指针,⾸先要掌握⼆维数组数据结构的特性。⼆维数组可以看成是元素值为⼀维数组的数组。假设有⼀个 3 ⾏ 4 列的⼆维数组a,它定义为:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
a 是数组名。a 数组包含3⾏,即 3 个元素:即 a[0]、a[1]、a[2]。⽽每个元素又是⼀个包含4 个元素的⼀维数组。同⼀维数组⼀样,a 的值为数组⾸元素地址值,⽽这⾥的⾸元素为 4 个元素组成的⼀维数组。
因此,从⼆维数组角度看,a 代表的是⾸⾏的⾸地址。 a+1 代表的是第⼀⾏的⾸地址。a[0]+0 可以表示为 &a[0][0],即⾸⾏⾸元素地址;a[0]+1 可以表示为 &a[0][1] ,即⾸⾏第⼆个元素的地址。
使⽤指针指向数组时,在⼀维数组中 a[0] 与 *a[o] 等价,a[1] 与 *a(+1) 等价。因此,在⼆维数组中 a[0]+1 和 *(a+0)+1 的值都是&a[0][1],如下图中地址1002,a[1]+2 和 *(a+1)+2 的值都是 &a[1][2],如下图中的地址1012。
下⾯再来看⼀个实例程序。
- #include <stdio.h>
- int main()
- {
- int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
- printf("%d,%d\n", a, *a);
- printf("%d,%d\n", a[0], *(a + 0));
- printf("%d,%d\n", &a[0], &a[0][0]);
- printf("%d,%d\n", a[1], a + 1);
- printf("%d,%d\n", &a[1][0], *(a + 1) + 0);
- printf("%d,%d\n", a[1][1], *(*(a + 1) + 1));
- return 0;
- }
上⾯实例程序中给出了对⼆维数组的基本操作,那么我们可以根据这些基本操作的组合作出更⾼级的操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。