指针=&数组名[数a][数b] *指针=指针指定的变量的值
指针+i=&数组名[数a][数b]后面第i个元素
上面程序中,刚开始*p的值为1,之后×2后值就变为2
用指针输出一个二维数组各元素的值
#include "stdio.h"
void main()
{
int a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1};
int *p;
for(p=&a[0][0];p<=&a[2][3];p++)
{
if((p-&a[0][0])%4==0)
printf("\n");
printf("%d ",*p);
}
printf("\n");
return 0;
}
输出结果如下:
&数组名[数a][数b]等价于数组名[数a]+数b
数组名[数a][数b]等价于*(数组名[数a]+数b)
所以上面程序也可写成这样:
#include "stdio.h"
void main()
{
int a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1};
int *p;
for(p=a[0];p<=a[0]+11;p++)
{
if((p-a[0])%4==0)
printf("\n");
printf("%d ",*p);
}
printf("\n");
return 0;
}
知道三名学生的成绩,用函数输出平均分
#include "stdio.h"
void shuchu(float a[3][4],int n);
void main()
{
float fenshu[3][4]={89,87,98,87,79,76,76,96,53,43,12,99};
shuchu(fenshu,12);
return 0;
}
void shuchu(float a[3][4],int n)
{
float sum=0;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
sum=sum+a[i][j];
printf("%f\n",sum/n);
}
函数声明:数组名[][某数]→*p
函数解释:数组名[i][j]→*(p+i*列数+j)
函数使用:数组名→*数组名
用上述的三条代换后可以得到下面的程序
#include "stdio.h"
void shuchu(float *q,int n);
void main()
{
float fenshu[3][4]={89,87,98,87,79,76,76,96,53,43,12,99};
int *p;p=&fenshu[0][0];
shuchu(p,12);
return 0;
}
void shuchu(float *q,int n)
{
float sum=0;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
sum=sum+*(q+i);
printf("%f\n",sum/n);
}
当然,两种程序输出的都一样