可以解释一下下面那个程序中*((*(p+i))+j)吗?
/*从键盘输入8名学生的成绩 输出平均分 并按平均分从高到低 输出各科成绩和平均成绩*/
#include<stdio.h>
//fun1 完成成绩的输入
void fun1(int a[])
{
int i,j,(*p)[3];
p=&a[0];
printf("请输入8个学生的3门成绩:\n");
for(i=0;i<8;i )
{
for(j=0;j<3;j )
{
scanf("%d",(*(p i)) j);
}
}
}
//求平均数
void fun2(int a[],float *ping)
{
int i,j,(*p)[3];
float s;
p=&a[0];
for(i=0;i<8;i )
{
s=0.0;
for(j=0;j<3;j )
{
s =*((*(p i)) j);
}
*(ping i)=s/3.0;
}
}
//按成绩排序
void fun3(int a[],float *ping)
{
int temp,i,j,k,(*p)[3];
p=&a[0];
for(j=7;j>0;j--)
{
for(i=0;i<j;i )
{
if(*(ping i)<*(ping i 1))
{
temp=*(ping i 1);
*(ping i 1)=*(ping i);
*(ping i)=temp;
for(k=0;k<3;k )
{
temp=*((*(p i 1)) k);
*((*(p i 1)) k)=*((*(p i)) k);
*((*(p i)) k)=temp;
}
}
}
}
}
//输出成绩
void fun4(int a[],float *ping[])
{
int i,j,(*p)[3];
p=&a[0];
printf("8个学生的3门成绩如下:\n");
for(i=0;i<8;i )
{
printf("%d个学生的成绩:\n",i 1);
for(j=0;j<3;j )
{
printf("%5d\n",*((*(p i)) j));
}
printf("%f\n",*(ping i));
}
}
main()
{
int i;
int a[8][3];
float ping[8];
fun1(a);
fun2(a,ping);
fun3(a,ping);
for(i=0;i<8;i )
{
printf("%f\n",*(ping i));
}
fun4(a,ping);
}