C语言小白提问```求大神

float search(float (*p)[4]){
float *pt = NULL;
for (int i = 0; i < 4; i++) {
if (
(*p + i) < 60) {
pt = *p;
}
}
return pt;
}

int main(int argc, const char * argv[]) {

float score[][4] = {{60,70,80,90},{56,86,97,68},{57,58,98,95}};
float *p,*q;
q = score;
for (int i = 0; i< 3; i++) {
    p = search(q + i);
     printf("不及格成绩为\n");
    if (p == *(q + i)) {   \\ 此处报错,不知为何.为什么  p == *(score + i)  对? 

        for (int j = 0; j < 4; j ++) {
            printf("%f\t", *(p + j));
        }
    }
}



return 0;

}

p == *(q + i)类型不一样,要么p == q+i,要么*p == *(q+i)

float (*q)[4];这样声明,才可以q=score
还有
if ( (*p)[i] < 60) {pt = *p;}这样才对
刚没仔细看,你把p\q类型一样,所以我说你p == *(q + i)不对,
这里面牵扯二级指针和数组指针,比较麻烦

再问一下 既然q\p类型一样,为什么*p == *(q + i)就不对了? p == q + i就对了?

 #include <stdio.h> 
#include <stdlib.h> 
float * search(float (*p)[4]){
    float *pt = NULL;
    for (int i = 0; i < 4; i++) {
        if ( (*p)[i] < 60) {
            pt = *p;
        }
    }
    return pt;
}
int main(int argc, const char * argv[]) {
float score[][4] = {{60,70,80,90},{56,86,97,68},{57,58,98,95}};
float *p;
float (*q)[4];
q = score;
for (int i = 0; i< 3; i++) {
    p = search(q + i);
    if (p == NULL) 
        continue;
     printf("不及格成绩为\n");
    if (p == *(q + i)) {   

        for (int j = 0; j < 4; j ++) {
            printf("%f\t", *(p + j));
        }
    }
}
return 0;
}