函数,数组和动态数组

时间:2013-12-14 13:53:41

标签: c++ arrays function pointers

到目前为止,我已经这样做了,我不知道我的错误在哪里或者我哪里出错了,我第一次想出了这个程序。我们必须从用户那里询问我使用动态数组完成的数组中的元素数量。然后我们必须传递2个参数,一个是数组的大小,另一个是数组(浮点类型)。

该函数应该用从左端到相关单元格的原始数组中所有单元格的内容之和来替换每个单元格的内容。例如,如果我有数组{1,2,3,4,5}函数应返回{1,3,6,10,15}。这是我的程序,请告诉我在现有代码中需要做些哪些更改。

#include <iostream>
using namespace std;

float compute(int x, float arr[]){
    float sum=0;

    for(int i=0; i<x;i++){
        sum+=arr[i];
        arr[i]=sum;
    }
    return arr;
}

int main(){
    int x;
    cout<<"How many elements you want"<<endl;
    cin>>x;

    float *p=new float[x];

    for(int i=0; i<x; i++){
        cin>>p[i];
    }
    cout<<compute(x,p);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

简单修复,如果你可以修改原始数组

void compute(int x, float arr[]) 
{ 
    float sum=0;

    for(int i=1; i<x ;i++)
        arr[i] = arr[i] + arr[i-1];

    // return arr; // Not required
}

然后,您可以执行以下操作

compute(x,p);
for(int i= 0 ; i< x; ++i)
   std::cout<< p[i] << std::endl;

此外,确保在处理

后释放已分配的内存

delete [] p;

答案 1 :(得分:0)

修复

#include <iostream>
using namespace std;

void compute(int x, float arr[]){
    float sum=0;

    for(int i=0; i<x;i++){
        sum+=arr[i];
        arr[i]=sum;
    }
}

int main(){

    int x;
    cout<<"How many elements you want"<<endl;
    cin>>x;

    float *p=new float[x];

    for(int i=0; i<x; i++){
        cin>>p[i];
    }

    for(int i=0; i<x; i++)
    {
        cout << p[i] << endl;
    }

    compute(x,p);
    cout << "----"<< endl;
    for(int i=0; i<x; i++)
    {
        cout << p[i] << endl;
    }
    delete[] p;
    return 0;
}

备注

float compute(int x, float arr[])
{
...
return arr;
}

您将compute的返回类型声明为float,然后返回类型为float[]的arr。这些类型不兼容。


您不能指望cout打印数组。

 cout<<compute(x,p);

在C和C ++中,数组实际上是由其第一个元素的内存地址传递的。 cout无法知道如何打印数组。


使用new创建数组时,您将始终必须使用delete[]运算符释放先前分配的内存。