问题描述
- 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("%ft", *(p + j)); } } } return 0;
}
解决方案
p == *(q + i)类型不一样,要么p == q+i,要么*p == *(q+i)
解决方案二:
float (*q)[4];这样声明,才可以q=score
还有
if ( (*p)[i] < 60) {pt = *p;}这样才对
刚没仔细看,你把pq类型一样,所以我说你p == *(q + i)不对,
这里面牵扯二级指针和数组指针,比较麻烦
解决方案三:
再问一下 既然qp类型一样,为什么*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("%ft", *(p + j));
}
}
}
return 0;
}
时间: 2024-09-17 03:40:22