编写一个函数,使用指针c+返回指向最大值的指针+; 这是我在C++中试图解决的问题。

编写一个函数,使用指针c+返回指向最大值的指针+; 这是我在C++中试图解决的问题。,c++,pointers,C++,Pointers,编写一个函数,返回指向浮点数据数组最大值的指针:double*max(double*a,int size)。如果大小为0,则返回nullptr 我面临的问题是: 最终输出不是数组中最大值的正确位置 错误说明:“无法在初始化中将'double**'转换为'double*' 如果我在此代码中的任何一点使用nullptr,CodeBlocks会给我一个错误 #包括 使用名称空间std; //从函数返回指向位置的指针 双*最大值(双*a,整数大小) { double maxVal=a[0];//这是起

编写一个函数,返回指向浮点数据数组最大值的指针:
double*max(double*a,int size)
。如果大小为0,则返回
nullptr

我面临的问题是:

  • 最终输出不是数组中最大值的正确位置

  • 错误说明:“无法在初始化中将'double**'转换为'double*'

  • 如果我在此代码中的任何一点使用
    nullptr
    ,CodeBlocks会给我一个错误

  • #包括
    使用名称空间std;
    //从函数返回指向位置的指针
    双*最大值(双*a,整数大小)
    {
    double maxVal=a[0];//这是起始最大值
    double*max_pos=&a;//指向[0]中的值
    //initialis]ze两个变量
    对于(int i=0;imaxVal){
    maxVal=a[i];
    
    cout您显示的代码中有一些错误:

  • 太糟糕了

  • size
    为0时,您没有按照指示返回
    nullptr

  • 您试图用
    &a
    (a
    double**
    )初始化
    max\u pos
    (a
    double*
    ),这是一个编译器错误

  • 您正在将
    &maxNum
    (a
    double**
    )传递到
    std::cout
    ,打印
    maxNum
    变量本身的地址,而不是它指向的地址(找到的数组元素)。您需要传递
    maxNum
    (a
    double*
    )如果要打印找到的元素的地址,或者如果要打印找到的元素的值,则传递
    *maxNum
    (a
    double

  • 请尝试类似以下内容:

    #include <iostream>
    
    // return pointer to location from function
    double* maximum(double *a, int size)
    {
        if (size == 0) return 0;
    
        // initialize both variables
        double* max_pos = a; // points to the value in a[0]
        double maxVal = *max_pos; // this is the starting max value
        std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
    
        for(int i = 1; i < size; ++i){
            if (a[i] > maxVal){
                max_pos = &a[i];
                maxVal = *max_pos;
                std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
            }
        }
    
        // return address
        return max_pos;
    }
    
    int main()
    {
        const int arrSize = 5;
        double myarr[arrSize];
    
        std::cout << "Input " << arrSize << " floating point values for your array" << std::endl;
    
        for(int i = 0; i < arrSize; ++i) { // loop to input values
            std::cin >> myarr[i];
        }
    
        for(int j = 0; j < arrSize; ++j) {
            std::cout << "Location for " << myarr[j] << " = " << &myarr[j] << std::endl;
        }
    
        double* maxNum = maximum(myarr, arrSize);
        std::cout << "maxNum = " << maxNum << " (" << *maxNum << ")" << std::endl;
    
        return 0;
    }
    

    nullptr
    似乎没有定义,所以如果您尝试使用它,为什么不希望出现错误?
    double*max\u pos=&a;
    在我看来有点奇怪。它获取指针的地址并尝试将其分配给指针,而不是指针的指针。您如何知道打印的地址是错误的?您如何知道正确的地址应该是:在最后一行中,指针的地址是“代码> >代码> NulLPTR</代码>,因为C++ 11的支持没有被打开,很可能丢失。请阅读。只是好奇,为什么你使用STL算法?我做的每一个类,我们从未显示过。@ RicardoMartinez,因为C++。类往往不教现实世界的C++,他们更多地关注于C语言,算法理论为STL所使用的东西(例如,一个例子,一个手动实现的代码:STD::Max(EngultEngEnter))/<代码>等等,而真实世界的真实程序员使用STL,它是标准化的,更安全,并且节省时间和精力。
    #include <iostream>
    
    // return pointer to location from function
    double* maximum(double *a, int size)
    {
        if (size == 0) return 0;
    
        // initialize both variables
        double* max_pos = a; // points to the value in a[0]
        double maxVal = *max_pos; // this is the starting max value
        std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
    
        for(int i = 1; i < size; ++i){
            if (a[i] > maxVal){
                max_pos = &a[i];
                maxVal = *max_pos;
                std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
            }
        }
    
        // return address
        return max_pos;
    }
    
    int main()
    {
        const int arrSize = 5;
        double myarr[arrSize];
    
        std::cout << "Input " << arrSize << " floating point values for your array" << std::endl;
    
        for(int i = 0; i < arrSize; ++i) { // loop to input values
            std::cin >> myarr[i];
        }
    
        for(int j = 0; j < arrSize; ++j) {
            std::cout << "Location for " << myarr[j] << " = " << &myarr[j] << std::endl;
        }
    
        double* maxNum = maximum(myarr, arrSize);
        std::cout << "maxNum = " << maxNum << " (" << *maxNum << ")" << std::endl;
    
        return 0;
    }
    
    #include <iostream>
    #include <algorithm>    
    #include <iterator>
    
    int main()
    {
        const int arrSize = 5;
        double myarr[arrSize];
    
        std::cout << "Input " << arrSize << " floating point values for your array" << std::endl;
    
        // loop to input values
        std::copy_n(std::istream_iterator<double>(std::cin), arrSize, myarr);
    
        for(int i = 0; i < arrSize; ++i) {
            std::cout << "Location for " << myarr[i] << " = " << &myarr[i] << std::endl;
        }
    
        double *maxNum = std::max_element(myarr, myarr + arrSize);
        std::cout << "maxNum = " << maxNum << " (" << *maxNum << ")" << std::endl;
    
        return 0;
    }