用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。
1. 多维数组元素的地址
先回顾一下多维数组的性质, 可以认为二维数组是“数组的数组”,例 :
定义int a [ 3 ][ 4 ] ={{1 , 3 , 5 , 7} ,{9,11,13,15},{17,19,21,23} } ;
则二维数组a 是由 3 个一维数组所组成的。设二维数组的首行的首地址为2000 ,则
#include
#define FROMAT ″%d,%d\n″
void main ()
{ int a [3][4] ={ 1 , 3 , 5 , 7 , 9 ,11,13,
15,17,19,21,23};
printf (FORMAT,a, * a);
printf (FORMAT,a [0] , * (a+0));
printf (FORMAT,&a [0] ,&a [0][0] );
printf (FORMAT,a [1] ,a+1);
printf (FORMAT,&a [1][0] , * (a + 1) + 0);
printf (FORMAT,a[2], * (a+2));
printf (FORMAT,&a[2],a+2);
printf (FORMAT,a[1][0], * ( * (a+
1)+0));
}
某一次运行结果如下:
158,158 (0 行首地址和 0 行 0 列元素地址 )
158,158 (0 行 0 列元素地址 )
158,158 (0 行 0 首地址和 0 行 0 列元素地址 )
166,166 (1 行 0 列元素地址和 1 行首地址 )
166,166 (1 行 0 列元素地址 )
174,174 (2 行 0 列元素地址 )
174,174 (2 行首地址 )
9,9 (1 行 0 列元素的值 )
指向多维数组元素的指针变量
(1) 指向数组元素的指针变量
例 如: 用指针变量输出二维数组元素的值
#include
void main ()
{ int a [3][4] ={ 1,3,5,7,9,11,13,15,17,19,21,23 };
int * p;
for (p=a[0];p<a[0]+12;p++)
{if((p-a[0])%4==0)
printf (″\n″);
printf (″%4d″, * p); }
}
(2) 指向由m个元素组成的一维数组的指针变量
例 : 出二维数组任一行任一列元素的值
#include
void main ( )
{ int a[3][4]={ 1 , 3 , 5 , 7 , 9 , 11 ,
13 , 15 ,17,19,21,23};
int ( * p)[4],i,j;
p=a;
scanf (″ i=%d,j=%d″,&i,&j);
printf (″a[%d,%d]=%d\n″,i,
j,* ( * (p+i)+j));
}
3. 用指向数组的指针作函数参数
例 : 有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average 求总平均成绩,用函数 search 找出并输出第i个学生的成绩。
#include
void main ()
{ void average ( float *p , int n );
void search ( float (*p )[ 4 ], int n) ;
float score [ 3 ][ 4 ] ={{65 , 67 , 70 , 60} , {80 ,
87 , 90 , 81} , {90 , 99 , 100 , 98}};
average ( *score , 12 );/ * 求 12 个分数的平均分 * /
search ( score ,2);/ * 求序号为2的学生的成绩 * /
}
void average ( float * p, int n)
{ float * p _ end;
float sum =0, aver ;
p_end =p+n-1;
for (;p<=p _ end;p++)
sum = sum +( * p);
aver = sum /n;
printf (″ average =%5.2f\n″, aver );
}
void search ( float (* p )[4] , int n)
/ * p 是指向具有 4 个元素的一维数组的指针 */ { int i;
printf (″ the score of No. % d are :\n″,n);
for (i=0;i<4;i++ )
printf (″% 5.2 f″, * ( * (p+n)+i));
}
程序运行结果如下:
average =82.25
The score of No.2 are :
90. 00 99 . 00 100 . 00 98 . 00
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69914734/viewspace-2654976/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69914734/viewspace-2654976/