可以解释一下下面那个程序中*((*(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);
 
 }
全部评论
就是&p[i][j]的意思,大概就是取出应该放的地址罢了。
点赞 回复
分享
发布于 2018-04-12 03:55

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务