代码之家  ›  专栏  ›  技术社区  ›  Ammarios

用C++指针打印数组最小值和最大值的函数

  •  -2
  • Ammarios  · 技术社区  · 3 年前

    我试图理解C++中的指针,所以我做了一个函数,它取数组和数组的长度,打印出数组的最小值和最大值,但是它总是只打印数组中的最小元素和最大值,最后逐行地检查我的代码,但是我仍然不理解这个行为的原因,请大家帮助理解和修正我的代码,谢谢。

    void getMinAndMax(int numbers[], int length)
    {
      int *min = &numbers[0];
      int *max = &numbers[0];
      cout << length << endl;
      for (int i = 1; i < length; i++)
      {
        if (*min > numbers[i])
        {
          *min = numbers[i];
        }
        if (*max < numbers[i])
        {
          *max = numbers[i];
        }
      }
      cout << "min: " << *min << endl;
      cout << "max: " << *max << endl;
    }
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   Ahmad Rafiq    3 年前

    因为,在if条件下使用了反引用运算符。您基本上是在更改指针指向的内存位置的值(在本例中是数组的第0个索引)。在if条件下,应该将索引存储在存在最小值和最大值的位置。 像这样

    if (*min > numbers[i])
    {
    min = &numbers[i];
    }
    

    这样,指针将保存最大值和最小值的地址,当您取消引用它们时,您将得到正确的答案。