C 如何将带有指针的数组传递到函数中?

C 如何将带有指针的数组传递到函数中?,c,arrays,function,pointers,parameter-passing,C,Arrays,Function,Pointers,Parameter Passing,这是我的密码: #include <stdio.h> #include <stdlib.h> void AverageOfAss(float marks[][101], int numStudents, int numAss, float *avg[]) { int i, j; for (j=0; j<numAss; j++) { *avg[j] = 0; for (i=0; i<numStude

这是我的密码:

#include <stdio.h>

#include <stdlib.h>


 void AverageOfAss(float marks[][101], int numStudents, int numAss, float *avg[]) {
    int i, j;
    for (j=0; j<numAss; j++) {    
        *avg[j] = 0;
        for (i=0; i<numStudents; i++) {
            *avg[j] += marks[i][j];
            *avg[j] = *avg[j]/(float)numStudents*100;
            return ;
        }
    }
}

void PrintAvg(float *avg[], int numAss) {
    int i;
    for (i=0; i<numAss; i++) {
        printf("Average for Exam %d = %.1f\n", i, *avg[i]);

        return;
    }
}

int main(int argc, char* argv[]) {
    float grades[1001][101], avgAss[1001];
    float *p;
    int i, j, row, col;

    p = avgAss;

    row = atoi(argv[1]);
    col = atoi(argv[2]);

    FILE *input_grades;

    input_grades = fopen("grades.txt", "r");

    // READ IN GRADES
    for (i=0; i<row; i++) {
        for (j=0; j<col; j++) {
            fscanf(input_grades, "%f, ", &grades[i][j]);
        }
    }

    // OUTPUT GRADES LIST
    printf("==================================\n");
    printf("Student grades from the input file\n");
    printf("==================================\n");
    for (i=0; i<row; i++) {
        printf("\n");
            for (j=0; j<col; j++) {
                printf("%.1f, ", grades[i][j]);
            }
    }
    printf("\n\n");
    AverageOfAss(grades, row, col, &avgAss);
    PrintAvg(&avgAss, col); 

    fclose(input_grades);
}
#包括
#包括
无效平均值(浮动标记[][101],整数学生,整数质量,浮动*平均值[]){
int i,j;

对于(j=0;j而言,问题在于指向
float
数组的指针与指向
float
的指针不同

错误消息实际上告诉您应该如何解决问题……编译器告诉您的是,
&avgAss
类型为
float(*)[1001]
,而您的参数类型为
float**
。因此,您需要更改函数参数类型以匹配编译器期望的类型,例如
float>(*avg)[1001]
。那么你有一个问题,
*avg[j]
实际上是指
*(avg[j])
而不是你需要的
(*avg)[j]


但是您根本不需要向数组传递指针。您只需要让数组自然衰减为指向其第一个元素的指针,因此您真正应该做的是将函数参数更改为
float*avg
并像普通数组
avg[j]一样使用它
。当然,不要传递指向数组的指针,在调用中只使用
avgAss

如果要将数组作为参数传递给函数,请修改该函数中数组的内容并保留修改后的数组,无需传递指向数组的指针,只需将指针传递给数组即可(即不带[]或&运算符的数组的名称)。
在C语言中,基本类型的数据通过副本传递给函数,因此您需要传递指向它们的指针以保留修改。数组不能通过副本传递,一级间接寻址就足够了。

不相关,即使在修复调用两端的参数类型之后,也无法正确计算平均值。并且循环的迭代和循环的报告都被
返回;
隐藏在循环体中。我怀疑你希望它们只迭代一次,然后返回给调用方。这正是我现在面临的问题,就像代码工作一样,但它计算的平均数是错误的,我不知道它是如何得到这个数字的。你知道问题是什么吗我知道我的密码吗?