这是我的代码:
#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);
}
一切都没问题,只是当我试图在终端上执行代码时,它显示了一些警告:
不兼容的指针类型传递&#39; float(*)[1001]&#39;参数 类型&#39;浮动**&#39;
AverageOfAss(成绩,行,col和avgAss);
将参数传递给参数&#39; avg&#39;此处
void AverageOfAss(float marks [] [101],int numStudents,int numAss,float * avg []){
不兼容的指针类型传递&#39; float(*)[1001]&#39;参数 类型&#39;浮动**&#39;
PrintAvg(&amp; avgAss,col);
将参数传递给参数&#39; avg&#39;此处
void PrintAvg(float * avg [],int numAss){
有谁知道我的代码发生了什么?我该如何解决? (新手在这里)
答案 0 :(得分:2)
问题是指向float
数组的指针与指向&avgAss
指针的指针不同。
错误消息实际上告诉您应该如何解决问题...编译器告诉您的是float(*)[1001]
类型为float **
,而您的参数类型为float (*avg)[1001]
}。因此,您需要更改函数参数类型以匹配编译器期望的内容,例如, *avg[j]
。那么您遇到的问题*(avg[j])
实际上意味着(*avg)[j]
而不是您需要float *avg
。
然而 您根本不需要传递指向数组的指针。您所需要的只是让数组自然地衰减到指向其第一个元素的指针,因此您真正应该做的是将函数参数更改为avg[j]
并将其用作普通数组avgAss
。当然,不要将指针传递给数组,在调用中只使用{{1}}。
答案 1 :(得分:0)
如果要将数组作为参数传递给函数,修改该函数中数组的内容并保留修改后的数组,不需要将指针传递给指向数组的指针,只需传递指针即可到数组(即没有[]或&amp;运算符的数组的名称)。 在C中,基本类型的数据通过复制传递给函数,因此您需要将指针传递给它们以保留修改。数组不能通过副本传递,一个间接层就足够了。