大一自学c语言提问的指针问题

img


我想问一下这个怎么改对,返回值类型与函数类型不匹配是什么意思?

我帮你修改了代码:(可以参考下)

#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 * 整数指针,这两个类型要一致。