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

C++ How to pass array by reference to function

这是我在学习 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);
}

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

访问相关元素

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

使用原始 C 数组

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 分配的数组的指针,它将变得更加复杂。