我帮你修改了代码:(可以参考下)
#include<stdio.h>
float* chazhao(float (*hang)[4], int n);
int main() {
float a[3][4] = {{65, 43, 56, 45}, {45, 65, 65, 64}, {65, 76, 78, 98}};
int xuhao, i;
float *p;
printf("序号:");
scanf("%d", &xuhao);
printf("第%d名学生的成绩: ", xuhao);
p = chazhao(a, xuhao - 1);
for (i = 0; i <= 3; i++)
printf("%f ", *(p + i));
printf("\n");
return 0;
}
float* chazhao(float (*hang)[4], int n) {
return *(hang + n);
}
代码中主要的改动有:
修改了函数chazhao的参数类型,将原来的float *hang[4]改为float (*hang)[4],表示指向二维数组首行的指针。
修改了函数chazhao的返回值类型,将原来的int *改为float *,表示返回一个指向一维数组的指针。
修改了函数chazhao的返回语句,将原来的return & (hang + n)[0]改为return *(hang + n),表示返回指向一维数组的指针。
在函数chazhao中,参数hang是一个二维数组的指针,表示指向学生成绩数组的指针,参数n表示要查找的学生的序号。函数返回一个指向该学生成绩的指针,即返回hang + n所指向的一维数组的首地址。
你函数返回类型是float,但你返回了一个int类型的值:q
函数声明为 float * 是返回浮点数指针,你函数里返回的 q 是 int * 整数指针,这两个类型要一致。