看看如下的介绍,希望对你有帮助:
指向一维数组的指针
指向数组的指针可以指向一维数组,也可以指向二维数组,这里只讨论指向一维数组的指针。
上面讨论过指向数组元素的指针,它是指向数组的某一个元素。而这里讨论的指向一维数组的指针是指它指向的不是一个元素,而是由若干个元素组成的一维数组。例如:
int(,pa)[5];
Pa是一个指向一维数组的指针,它所指向的一维数组是由5个int型元素组成的。如果该指针加1,则将指向下面的5个元素oPa指针的增值是以5个元素的一维数组长度为单位的。实际上,指向一维数组的指针,是指向二维数组的某一列的首元素地址。例如:
int(*pa)[5];
int
a[3][5];
pa=a+1;
这表明pa是一个指向一维数组的指针,它指向二维数组a的第一行首列元素的地址。pa加1将指向第二行首列元素,pa-1将指向第0行首列元素。
[例7.21]
一个指向一维数组指针的例子。分析该程序的输出结果,说明指向一维数组的指针是怎祥赋值和使用的。
int
a[3][5]={1,2,3,4,5},{6,7,8,9,10},{ll,12,13,14,15}.
main(}
int(*p)[5];
p=a+1;
priatf
("%d,%d,%d\n",p[0][0],*(*(p+1)+1),*(p[-1]+3
}
执行该程序输出结果如下:
6,
12
说明;程序中p是一个指向一维数组的指针,它所指向的一维数组有5个int型元素。即p要指向一个包含有5个元素的一维数组。P的值是该一维数组的首元素地址。用a十1或&a[1]值赋给P,则使p指向a数组的第一行首列地值。不能用某行某列的地值给p赋值,P[0][0]等价**P,即a[[1][0]元素的值。*(*(p+1)+1)等价于p[1][1],即a[2}[1]元素的值。而*(P[-1]+3)等价于,*(*(p-1)+3),即a[0][3]元素的值。因此,输出上述结果。
实际上,指向一维数组的指针是一个二级指针,它所指向的是一个二维数组,给指向一维数组的指针所赋的值是二维数组的某行的行地址。二维数组a[3][5]的行地址表示为a十i,i为0,1,2.一个指向一维数组的指针(*
p)[5]可以用a+i(i=0,1,2)来进行赋值。
温馨提示:内容为网友见解,仅供参考