函数返回值为float,为什么返回的是int型

#include<iostream>
using namespace std;
float average(int *,int );
void main()
{
const int n=100;
int a[n];
for(int i=0;i<n;i++) a[i]=100+i;
cout<<"average: "<<average(a,n);
}
float average(int *p,int x)
{
int total=0;
for(int i=0;i<x;i++)
total=total+p[i];
cout<<total<<endl;
return total/x;
}

若使用C编译器则会出现警告,但使用C++编译器则无警告.
以下是我自己的理解,不知对否:
1.在将实参传递给形参后,所传递的值的类型应为函数中形参的类型,若传递的值的类型与形参类型不一致,则强制类型转换;
2.函数的返回值类型最终由函数名称前的类型决定,与return后的类型无关;
3.至于为什么会显示"假int型",是因为cout在输出float等类型时,自动省略了小数点后面的0.要想看到小数点可以改为:cout<<"average<<showpoint<<average(a,n).
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-16
函数指针
现来看看以下声明语句,看看其含义:
float (*h(int, void (*)(int)))(int);

以下是一个变量指针的定义语句:
float* pf;

以下是一个普通函数的声明语句:
float f();

请看以下声明语句:
float* g();

因为()的优先级高于*, 所以相当于:
float* (g());

g是一个函数, 返回值为float*, 参数为void

float (*h)();

中, h是个指针, 指向一个返回值为float的函数.
去掉h, 就是h的类型:
float (*)();

若要调用h所指的函数, 解引用这个指针即可:
(*h)();

它的缩写为(注意, 仅仅是缩写):h();
注意不能将(*h)两边的括号去掉, 去掉后,*h()等价于*(h()). ANSI C会把它认为是以下语句的缩写:
*((*h)());

上面的语句表示: 执行h所指向的函数, 然后解引用函数的返回值.
若h指向的函数有参数, 参数是指向函数的指针呢? 假设该参数的类型为: void (*)(int), 则h可以声明为:
float (*h)(void(*)(int));

已知有以下函数的声明:
float func(int);

若要使h指向函数func, 只需要将(*h)替换func即可:
float (*h)(int);

更进一步, h所指的函数不返回float, 而是返回指向函数的指针呢? 该指针的类型为float(*)(int).
float (*h(parameter))(int);本回答被网友采纳
第2个回答  2011-10-06
返回是float类型没错

但是return total/x;这句中total和x都为int类型,相除得到的值也是int类型

所以将int total;改为float total;就行了
第3个回答  2011-10-06
cout<<"average: "<<showpoint<<average(a,n)<<endl;

输出结果 不带小数 COUT 默认 取消小数
相似回答