这是我的代码:
#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);
}
一切正常,只是当我尝试在终端上执行代码时,它显示了一些警告:
不兼容的指针类型,将“ float(*)[1001]”传递给“ float **”类型的参数
AverageOfAss(等级,行,列和&avgAss);
在此处将参数传递给参数“ avg”
void AverageOfAss(浮点数[] [101],int numStudents,int numAss,float * avg []){
不兼容的指针类型,将“ float(*)[1001]”传递给“ float **”类型的参数
PrintAvg(&avgAss,col);
在此处将参数传递给参数“ avg”
void PrintAvg(float * avg [],int numAss){
有人知道我的代码发生了什么事吗?而我该如何解决呢?(这里的新手)
问题在于,指向的数组的float
指针与指向的指针的指针不同float
。
错误消息实际上告诉您确切应该如何解决问题...编译器告诉您的是&avgAss
类型,float(*)[1001]
而参数为类型float **
。因此,您需要更改函数参数类型以匹配编译器的期望,例如float (*avg)[1001]
。然后,您将遇到一个*avg[j]
实际上意味着要解决的问题,*(avg[j])
而不是您所需要的(*avg)[j]
。
但是,您根本不需要将指针传递给数组。您需要做的就是让数组自然衰减到指向其第一个元素的指针,因此您真正应该做的就是将function参数更改为,float *avg
并像普通数组一样使用它avg[j]
。当然,不要将指针传递给数组,只能avgAss
在调用中使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句