C ++如何通过引用函数传递数组

时间:2016-04-11 01:07:01

标签: c++ arrays function pass-by-reference

这是我在学习C ++时一直在努力的工作代码 我怎么能修改它,以便ArraySortToMedian()使用指针表示法而不是数组表示法来处理数组?

到目前为止,我所有的尝试都没有奏效,因此我缺少逻辑关系或语法。提前谢谢。

#include <iostream>
#include <fstream>

double ArraySortToMedian(int [], int ); 

using namespace std;

int main() 
{
    ifstream infile;
    infile.open("numbers.txt");

    const int SIZE = 6;
    int array[SIZE];
    int i = 0;
    double median;

    if(!infile)
    {
    cout << "couldn't find 'numbers.txt'";
    return 1;   
    }

    while(i < SIZE && infile >> array[i])
    i++;

    infile.close();

    for(i = 0; i < SIZE; i++)
    cout << *(array + i) << "!\n"; 

    median=ArraySortToMedian(array, SIZE);

    cout<< "\n" << median << "\n";
    return 0;
}

double ArraySortToMedian(int (x[]), int numElem)
{
    bool swap;
    int temp, i;
    double m;

    do
    {
    swap = false;
    for(i = 0;i < (numElem - 1); i++)
    {
        if( x[i] > x[i + 1] )
        {
            temp = x[i];
            x[i] = x[i + 1];
            x[i + 1] = temp;
            swap = true;
        }
    }
    }
    while (swap);
    cout << "\n";
    for(i = 0; i < numElem; i++)
    cout << x[i] << "\n";

    m = (x[numElem/2] + x[numElem/2]-1)/(double)2;
    return(m);
}

2 个答案:

答案 0 :(得分:1)

可以这样做。但是,我强烈反对它,你最好使用std::array来实现更清洁。这种函数参数的语法非常难看。

使用原始C-Arrays

template <size_t N>
double ArraySortToMedian(int (&x)[N], int numElement); 

使用STL数组

template <size_t N>
double ArraySortToMedian(std::array<int,N>& x, int numElement)

这对动态分配的数组不起作用,如果你试图重载这些模板来处理指向用new分配的数组的指针,它会变得指数级更复杂。

答案 1 :(得分:0)

只需将签名更改为int* arr,然后使用*(x + i)

访问受尊重的元素