注册 登录
编程论坛 C++教室

以下代码为何显示这个错误

hffjhhh 发布于 2020-11-29 10:08, 1598 次点击
显示这行有错误:
function1(function);

错误信息为:
[Error] cannot convert 'int* (*)()' to 'int*' for argument '1' to 'void function1(int*)'
如何修改?代码如下:
程序代码:
#include<iostream>
int *function(){
    int b[10];
    for(int i=0;i<10;i++){        
        std::cin>>b[i];
    }
    return b;
}
void function1(int *bb){
    for(int i=0;i<10;i++)
        std::cout<<bb[i]<<std::endl;
}
void function2(int *a){
    int sum=0;
    for(int i=0;i<10;i++)
        sum+=*(a+i);
    std::cout<<"平均成绩:"<<sum/10;
}
int main(void){
    using namespace std;
    int *b=function();
    function1(function);
    function2(function);
    return 0;
}
2 回复
#2
apull2020-11-29 10:42
回复 楼主 hffjhhh
程序代码:
#include<iostream>
using namespace std;    //这句放这里,后面不用加std:;

int *function(){
    int *b=new int[10];    //int b[10],函数结束后这个数组就被销毁了
    for(int i=0;i<10;i++){        
        cin>>b[i];
    }
    return b;
}
void function1(int *bb){
    for(int i=0;i<10;i++)
        cout<<bb[i]<<endl;
}
void function2(int *a){
    float sum=0;    //结果有小数,用float
    for(int i=0;i<10;i++)
        sum+=*(a+i);
    cout<<"平均成绩:"<<sum/10;
}
int main(void){
    int *b=function();
    function1(b); //function是函数,function1的参数得是函数指针,也就是错误所提示的类型转换不了。
    function2(b); //如果只是传递输入的数组,传递b就可以了
    delete b;    //与new对应
    return 0;
}
#3
rjsp2020-11-29 17:36
程序代码:
#include <iostream>
#include <algorithm>
#include <numeric>
#include <span>
using namespace std;

void function0( span<int> arr )
{
    copy_n( istream_iterator<int>(cin), size(arr), begin(arr) );
}

void function1( const span<int> arr )
{
    copy( begin(arr), end(arr), ostream_iterator<int>(cout,"\n") );
}

int function2( const span<int> arr )
{
    return reduce(begin(arr),end(arr),0)/size(arr);
}

int main(void)
{
    int b[10];
    function0( b );
    function1( b );
    cout << "平均成绩:" << function2(b) << endl;
}
1