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