填充函数中的指针数组

时间:2014-08-08 18:29:27

标签: c++ arrays pointers

我的程序应该填满并显示一个数组。它还应该计算数组中的平均值。

程序在此行停止:

cin >> *f1[j];

我认为这是问题所在,但我本可以在其他地方犯错误。

#include <iostream>

using namespace std; 

// prototypes
void add(int*f[],int h);      
void show(int*f[],int h);
int average(int*f[],int h);

int main()
{
    // getting size of a array
    cout << "How many numbers would you insert? : ";
    int i = 0;
    cin >> i;
    cout << endl;

    // the dinamic array
    int * arr = new int[i]; 

    // call functions
    add(&arr, i);
    show(&arr, i);
    average(&arr, i);

    // deleting the dinamic array
    delete[] arr;
    system("pause");
    return 0;
}

// declaring of the functions

// this function should fill up the array
void add(int* f1[], int h)
{
    for(int j = 0 ; j < h ; j++)
    {
        cout << "Insert " << j+1 << ". value : ";
        cin >> *f1[j]; //this should be the problem
        cout << endl;
    }

}

// this function should show the array
void show(int *f2[], int h)
{
    for(int j = 0 ; j < h ; j++)
    {
        cout << *f2[j] << ", ";
    }
}

// this function should should show average value of the array
int average(int *f3[], int h)
{
    int n = 0;
    for(int j = 0 ; j < h ; j++)
    {
        n += *f3[j];
    }
    n /= h;
    return n;
}

2 个答案:

答案 0 :(得分:1)

您没有正确引用数组。 p*指向p[0]

索引
cout << *f2[j] << ", ";

应该是

cout << f2[j] << ", ";

它编译并运行我所做的编辑。

http://ideone.com/DsxOOP

另外,你没有接受任何输入。

答案 1 :(得分:0)

你需要:

  • 在您的功能签名中使用int* fX
  • 从函数调用中删除&引用(您已经在arr中存储了一个内存地址,并且没有其他内存地址的内存地址)
  • 在您的函数中不使用*解除引用(您已经使用[]索引取消引用该数组)

http://pastebin.com/xY7A6JvE编译并运行。