查找指向数组最大值的指针

时间:2017-11-23 23:39:36

标签: c++ arrays pointers max

我写了一个应该"返回"指向数组最大值的指针

void findMax(int arr[], int n, int* pToMax)
{
    if (n <= 0)
        return;   

    pToMax = arr;

    for (int i = 1; i < n; i++)
    {
        if (arr[i] > *pToMax) {
            pToMax = arr + i;
        }
    } 
}

主要是我用

来调用它
int nums[4] = { 5, 3, 15, 6 };
int* ptr = nums;
findMax(nums, 4, ptr);

然而,看起来指针值似乎没有从函数中改变,这使我相信第三个参数可能必须是指向指针的指针。但我认为无论用函数中的指针做什么都会改变指针(就像引用一样)

编辑:重新编写功能

void findMax(int arr[], int n, int** pToMax)
{
    if (n <= 0)
    return;

    pToMax = &arr;

    for (int i = 1; i < n; i++)
    {
        if (arr[i] > *(*pToMax)) {
            *pToMax = arr + i;
        }
    }
}

现在我称之为

int nums[4] = { 5, 3, 15, 6 };
int* ptr = nums;
findMax(nums, 4, &ptr);

3 个答案:

答案 0 :(得分:2)

Killzone Kid使用通过引用传递的指针发布了一个有效的解决方案。你的第二次尝试实际上也在正确的轨道上。您刚刚重新分配pToMax时发生了一个小错误,因此它不再指向ptr,而是指向arr。相反,您应该取消引用pToMax以指向ptrarr。这是一个经过测试和运作的解决方案:

#include <iostream>

void findMax(int arr[], int n, int** pToMax)
{
    if (n <= 0)
    return;

    *pToMax = arr;

    for (int i = 1; i < n; i++)
    {
        if (arr[i] > *(*pToMax)) {
            *pToMax = arr + i;
        }
    }
}

int main( void )
{
    int nums[4] = { 5, 3, 15, 6 };
    int* ptr = NULL;
    findMax(nums, 4, &ptr);

    std::cout << *ptr << std::endl;
}

答案 1 :(得分:0)

更好的方法是执行int num[5]={1, 5, 6, 2, -1},因为您只使用了一个整数数组。

假装您拥有数组int theMax = *max_element(num, num + 5);; 您可以使用内置的C ++函数max_element创建一个单行命令,而不是您的函数。 要查找最大元素,您只需说#include <iostream> #include <algorithm> using namespace std; int main() { int num[5] = {1, 5, 6, 2, -1}; int theMax = *max_element(num, num + 5); cout << theMax << endl; } 即可完成。

以下是一个示例程序:

    public async Task OpenFileWithAsync(string path)
    {
        var file = await StorageFile.GetFileFromPathAsync(path);

        if (file != null)
        {
            var options = new LauncherOptions();
            options.DisplayApplicationPicker = true;
            var success = await Launcher.LaunchFileAsync(file, options);

            if (success)
            {
                //File Launched
            }
            else
            {
                //File Launch Failed
            }
        }
    }

答案 2 :(得分:0)

首先,我在下面提出了解决问题的方法:

#include <iostream>
using namespace std;

int * findMax(int arr[], int n, int* pToMax)
{
    if (n <= 0)
        return pToMax;

    for (int i = 1; i < n; i++)
    {
        if (arr[i] > *pToMax) {
            pToMax = arr + i;
        }
    }

    return pToMax;
}

int main() {

  int nums[4] = { 5, 3, 15, 6 };
  int* ptr = nums;
  cout << "Big is " << *findMax(nums, 4, ptr) << "\n";

  return 0;
}

请注意:当您创建一个指向数组的指针时,它默认采用初始位置,因此函数内的赋值pToMax = &arr;不是必需的。

要理解的另一件事是您没有使用2D数组,因此int** pToMax完全超出了此问题的范围。

检查上面的解决方案。希望它可以帮到你。

注意:此问题根本不需要使用指针。但如果你的研究专注于理解指针,那么这个解决方案对你有用。