我的任务是编写一个函数,该函数采用三个参数:使用动态数组的双数组指针、最小元素指针和最大元素指针。这是我的代码,我是编程和指针的新手,但我正在尝试。
#include<iostream>
#include<algorithm>
using namespace std;
void readArr(double* arr_ptr, int numb)
{
for(int i = 0 ; i < numb ; i++)
{
cin >> arr_ptr[i];
}
}
void minMax(double* arr_ptr, double* min_ptr, double* max_ptr, int numb)
{
for(int i =1; 0 < numb; i++)
{
if((*arr_ptr + i) < (*min_ptr))
{
min_ptr = arr_ptr + i ; //ptr
}
}
for (i=1; i<numb; i++)
{
if (arr[i] > *max_ptr)
{
*max_ptr = arr[i];
}
}
int main()
{
cout << "How many elements? " << endl;
int numb;
cin >> numb;
double* arr = new double[numb];
readArr(arr, numb);
double* min = NULL;
double* max = NULL;
minMax(arr, min, max, numb);
cout <<(*min) << " " << (*max) << endl;
if(arr) // if arr != NULL
{
delete [] arr;
arr = NULL;
}
}
你能告诉我函数minMax应该是什么样子吗?
C/C++不能返回多个返回值。
因此,为了在一次调用中返回min
和max
,您需要通过指针或引用(仅限C++)传递预先分配的min
和max
变量,并让您的函数修改它们。
所以当你调用这个函数时:
double min, max;// first create the variable that hold the results
minMax(arr_ptr, &min, &max, numb);// pass the address of them in
// so that function can modify
// them by writing into those
// addresses
如果我理解正确,您可以传递给minMax
函数:
- 双数组及其大小(输入参数)
- 一个指向最小值的指针和一个指向最大值的指针(输出参数)
修改函数中的指针min_ptr
或max_ptr
是没有用的:它们是函数的本地指针,调用方变量不会更改(如果您传递了地址,则不会更改):最好确保输出指针指向调用前的某个对象,并且只修改指向的值。类似于:
void minMax(double* arr_ptr, double* min_ptr, double* max_ptr, int numb)
{
int i;
// initialize min and max to first value
*min_ptr = *max_ptr = arr_ptr[0];
for(int i =1; i < numb; i++)
{
if((arr_ptr[i]) < (*min_ptr))
{
*min_ptr = arr_ptr[i] ;
}
}
for (i=1; i<numb; i++)
{
if (arr_ptr[i] > *max_ptr)
{
*max_ptr = arr[i];
}
}
}
并这样称呼它:
double* arr = new double[numb];
readArr(arr, numb);
double min;
double max;
minMax(arr, &min, &max, numb);
cout <<min << " " << max << endl;
或者,如果您真的想让指针指向double,则必须将指针传递给指针(double **
)