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语言中,基本类型的数据通过副本传递给函数,因此您需要传递指向它们的指针以保留修改。数组不能通过副本传递,一级间接寻址就足够了。不相关,即使在修复调用两端的参数类型之后,也无法正确计算平均值。并且循环的迭代和循环的报告都被返回;
隐藏在循环体中。我怀疑你希望它们只迭代一次,然后返回给调用方。这正是我现在面临的问题,就像代码工作一样,但它计算的平均数是错误的,我不知道它是如何得到这个数字的。你知道问题是什么吗我知道我的密码吗?