行指针依据的是二维数组的递归定义,可以把一个二维数组看成若干个行向量,每个行向量都是一个一维数组。定义一个指向行向量的指针,称之为行指针。
二维数组行指针变量说明的一般形式为:
类型说明符 (*指针变量名)[长度]
其中,“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意“(*指针变量名)”两边的括号不可少,若缺少括号则表示是指针数组(本章后面将介绍),意义就完全不同了。
定义一个二维数组:int a[3][4],把这个二维数组的元素遍历出来。
1 #include<stdio.h>
2 void main()
3 {
4 int a[3][4]={{11,21,33,42},{15,22,32,13},{41,32,24,16}};(www.xing528.com)
5 int*p;
6 for(p=*a;p<*a+3*4;p++)
7 printf("%d",*p);
8 printf("\n");
9 }
二维数组a分解为一维数组a[0]、a[1]、a[2]之后,设p为指向二维数组的指针变量,即行指针。其定义格式为:
int(*p)[4];
它表示p是一个行指针变量,它指向包含4个元素的一维数组。由于“[]”的优先级高于“*”,用圆括号将*p括起来,让p先与*相结合,表明p是一个指针,然后再与[4]相结合,表明p指向一个含有4个元素的二维数组。若指向第一个一维数组a[0],其值等于a、a[0]或&a[0][0]等。而p+i则指向一维数组a[i]。从前面的分析可知,*(p+i)+j是二维数组i行j列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。