繁体   English   中英

具有三个参数的函数:指向双精度数组的指针,指向最小值的指针和指向最大值元素的指针

[英]Function that takes three parameters: pointer to double array, pointer to minimum and pointer to maximum element

我的任务是编写一个带有三个参数的函数:使用动态数组的双精度数组指针,最小和最大指针。 这是我的代码,我是编程和指针的新手,但我正在尝试。

#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 ++无法返回多个返回值。

因此,为了在一次调用中获得minmax ,您需要通过指针或引用(仅C ++)传递预先分配的minmax变量,并让您的函数对其进行修改。

因此,当您调用此函数时:

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_ptrmax_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 **

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM