有一道关于指针与二维数组的题有些不明白为什么这样写错误。

这个问题时有五名学生,每人有三门考试成绩,计算每个学生的总分与平均成绩。查找一门及以上课程不及格的学生,输出全部学生的成绩。

为什么我这样写错呢

#include<stdio.h>
void average(int score);
void search(int(*p1)[6]);
int main()
{
    printf("学号      数学      英语      计算机      总分      平均数");
    int score[5][6]={{201101,78,93,82},{201102,67,83,72},{201103,55,83,62},{201104,65,59,70},{201105,80,78,90}};
     average(score);   
     search(score);
     return 0;
}
void average(int score[5][6])
{
    int i,b;
    for(i=0;i<5;i++)
    for(b=0;b<6;b++)
    {
        if(b==4) score[i][b]=score[i][b-1]+score[i][b-2]+score[i][b-3];
        if(b==5) score[i][b]=(score[i][b-1]+score[i][b-2]+score[i][b-3])/3;
    }
    for(i=0;i<5;i++)
    for(b=0;b<6;b++)
{    printf("%-12d",score[i][b]); if(b==5) printf("\n");  } printf("\n");
}
void search(int(*p1)[6])
{
    int i,b;
    printf("成绩有一门以上不及格的学生如下:\n");
    for(i=0;i<5;i++)
    for(b=1;b<4;b++)
    {
        if(*(*(p1+i)+b)<60) 
        {
            for(b=0;b<6;b++)
    {    printf("%-12d",*(*(p1+i)+b)); if(b==5) printf("\n");}
        }
    }

声明与定义不一致