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;
}