C语言基本教程(四)指针、布局、连系和列举(6)
2.2.2 指向一个由n个元素所构成的数组指针
在Turbo C中, 可界说如下的指针变量:
int (*p)[3];
指针p为指向一个由3个元素所构成的整型数组指针。在界说中,圆括号是不能少的,不然它是指针数组,这将在后头先容。这种数组的指针差异于前面先容的整型指针,当整型指针指向一个整型数组的元素时,举办指针(地点)加1运算,暗示指向数组的下一个元素, 此时地点值增加了2(因为放大因子为2),而如上所界说的指向一个由3个元素构成的数组指针,举办地点加1运算时,其地点值增加
了6(放大因子为2×3=6),这种数组指针在Turbo C顶用得较少,但在处理惩罚二维数组时,照旧很利便的。譬喻:
int a[3][4], (*p)[4];
p=a;
开始时p指向二维数组第0行,当举办p+1运算时,按照地点运算法则,此时放大因子为4×2=8,所以此时正好指向二维数组的第1行。和二维数组元素地点计较的法则一样,*p+1指向a[0][1],*(p+i)+j则指向数组元素a[i][j]。
例1
int a[3] [4]={
{1,3,5,7},
{9,11,13,15},
{17,19,21,23}
};
main()
{
int i,(*b)[4];
b=a+1; /* b指向二维数组的第1行, 此时*b[0]或
**b是a[1][0] */
for(i=1;i<=4;b=b[0]+2,i++)/* 修改b的指向, 每次增加2 */
printf("%d\t",*b[0]);
printf("\n");
for (i=0; i<2; i++) {
b=a+i; /* 修改b的指向, 每次跳过二维数组的
一行 */
printf("%d\t",*(b[i]+1));
}
printf ("\n");
}
措施运行功效如下:
9 13 17 21
3 11 19