为什么会出现illeagal indirection

# include<stdio.h>
void main()
{
void avsco(float * ,float * );
void avcour1(char (*)[10],float *);
void fail2(char course[5][10],int num[],float * pscore,float aver[4]);
void good(char course[5][10],int num[4],float * pscore,float aver[4]);
int i,j,* pnum,num[4];
float score[4][5],aver[4],* pscore,* paver;
char course[5][10],(* pcourse)[10];
printf("input course:\n");
pcourse=course;
for (i=0;i<5;i++)
scanf("%s",course[i]);
printf("input No. and scores:\n");
printf("No.");
for (i=0;i<5;i++)
printf(",%s",course[i]);
printf("\n");
pscore=& score[0][0];
pnum=& num[0];
for (i=0;i<4;i++)
{
scanf("%d",pnum+i);
for(j=0;j<5;j++)
scanf("%f",pscore+5*i+j);
}
paver=& aver[0];
printf("\n\n");
avsco(pscore,paver);
avcour1(pcourse,pscore);
printf("\n\n");
fail2(pcourse,pnum,pscore,paver);
printf("\n\n");
good(pcourse,pnum,pscore,paver);
}
void avsco(float pscore,float paver)
{
int i,j;
float sum,average;
for (i=0;i<4;i++)
{
sum=0.0;
for (j=0;j<5;j++)
sum=sum+(* (pscore+5*i+j));
average=sum/5;
* (paver+i)=average;
}
}
void avcour1(char (* pcourse)[10],float pscore)
{
int i;
float sum,average1;
sum=0.0;
for (i=0;i<4;i++)
sum=sum+(* (pscore+5*i));
average1=sum/4;
printf("course1:%s,average score:%7.2f\n",pcourse,average1);
}
void fail2(char course[5][10],int num[],float * pscore,float aver[4])
{
int i,j,k,label;
printf("===Student who is fail=== \n");
printf("No.");
for (i=0;i<5;i++)
printf("%11s",course[i]);
printf(" average\n");
for (i=0;i<4;i++)
{
label=0;
for (j=0;j<5;j++)
if(* (pscore+5*i+j)<60.0) label++;
if (label>=2)
{
printf("%d",num[i]);
for (k=0;k<5;k++)
printf("%11.2f",* (pscore+5*i+k));
printf("%11.2f\n",aver[i]);

}
}
}
void good(char course[5][10],int num[4],float * pscore,float aver[4])
{
int i,j,k,n;
printf("No.");
for(i=0;i<5;i++)
printf("%11s",course[i]);
printf(" average\n");
for (i=0;i<4;i++)
{
n=0;
for (j=0;j<5;j++)
if(* (pscore+5*i+j)>85.0)
n++;
if((n==5)||(aver[i]>=90))
{
printf("%d",num[i]);
for(k=0;k<5;k++)
printf("%11.2f",* (pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}

}

有2个函数的声明和定义不一致。应该是笔误造成的。把
void avsco(float pscore,float paver)
void avcour1(char (* pcourse)[10],float pscore)
这两行改成
void avsco(float *pscore,float *paver)
void avcour1(char (* pcourse)[10],float *pscore)
一共加3个*,使声明和定义一致,就可以编译通过了。
温馨提示:答案为网友推荐,仅供参考