带数组输入的自定义函数:错误:|无法将float转换为float * |没有任何演员

时间:2013-12-31 12:50:31

标签: c arrays casting average

我想制作一个获得2个月每天温度的程序,并打印每天的平均值
错误代码位于调用day_avg()的行 (不能将浮动浮动浮动*)

#include <stdio.h>
void day_avg(float month[],float month2[]);

int main()
{
    float jul[31]={ 31,28,31,30,31,30,31,31,30,31,30,31 };
    float aug[31]={ 31,28,31,30,31,30,31,31,30,31,30,31 };
    day_avg(jul[31],aug[31]);
}
void day_avg(float month[],float month2[]){
    int i;
    float avg[31]={0};
    for(i=0;i<31;i++)
        avg[i]=(month[i]+month2[i])/2.0;
    for(i=0;i<31;i++)
        printf("\nAverage of temperature of 2 months for day %d :%.1f",i+1,avg[i]);
}

4 个答案:

答案 0 :(得分:2)

您对day_avg(jul[31],aug[31])的来电应为day_avg(jul, aug)

julaug是对数组的引用,它们知道它们有多大,所以在函数调用中指定它是错误的,并且没有做你想象的那样。实际发生的是您从julaug的数组索引31而不是整个数组发送值。

第二个问题是数组索引31超出了数组的范围,有效索引在大小为31的数组中为0-30

您希望在整个数组中发送所有日期的温度数据,因此day_avg(jul, aug)

答案 1 :(得分:1)

你正在调用你的功能

day_avg(jul[31],aug[31]);  

day_avg需要float *类型的参数 由于数组名称在作为参数传递给函数时衰减为指针(并非总是如此),因此可以将其称为

 day_avg(jul, aug); 

编辑:根据OP的评论:我将输入定义为month[]而不是month*,我认为数组本身就是输入

编译器已解析

void day_avg(float month[], float month2[]);  

as

void day_avg(float *month, float *month2);  

您不能将整个数组传递给函数,而是传递给第一个元素。


侧面注意:
此外,如果day_avg接受float类型的参数,那么您无法将jul[31],aug[31]作为数组索引编制从0传递到C.

答案 2 :(得分:1)

您的void day_avg(float month[],float month2[])函数正在等待指针并且您正在传递值。你应该这样传递day_avg(jul,aug);

答案 3 :(得分:0)

两个问题:

失踪;最后

float jul[31]={ 31,28,31,30,31,30,31,31,30,31,30,31 };
float aug[31]={ 31,28,31,30,31,30,31,31,30,31,30,31 };

第二个功能应该是:

  

day_avg(七月,八月);