如何通过引用传递此指针?

时间:2016-01-29 04:48:59

标签: c++ pointers pass-by-reference

指针和引用的新功能因此我对此并不十分清楚,但我试图传递指针* minDataValue和* maxDataValue,以便在它们从函数返回时更改它们的值。到目前为止,在代码中,它们的值不会发生变化(如测试代码所示),如何设置它们以及我需要更改哪些内容以使它们通过引用传递,以便值可以在更改时更改功能完成了。谢谢!

 void findMinAndMax(int array[], int size, int *min, int *max) {

  int smallest = array[0];
  int largest = array[0];

  min = &smallest;
  max = &largest;

  for (int i = 1; i < size; i++)
  {
    if (array[i] > largest){
      largest = array[i];
    }
    if (array[i] < smallest){
      smallest = array[i];
    }
  }

  // testing code
  cout << *min << endl;
  cout << *max << endl;

}

int *makeFrequency (int data[], int dSize, int *minDataValue, int    *maxDataValue) {

   cout << *minDataValue << endl;// testing code
   cout << *maxDataValue << endl;// testing code

   findMinAndMax(data, dSize, minDataValue, maxDataValue); // How do I pass this so that the value changes after the min and max are found? 

   cout << *minDataValue << endl; // testing code
   cout << *maxDataValue << endl;// testing code

}

int main() {

int dSize;
int *ArrayOfInts;

  cout << "How many data values? ";
  cin >> dSize;

  ArrayOfInts = new int [dSize];

  getData(dSize, ArrayOfInts);

  int *frequency, min, max;

  frequency = makeFrequency(ArrayOfInts, dSize, &min, &max);
 }

3 个答案:

答案 0 :(得分:1)

You have to use pointer of pointer or pass by reference (@Sami Sallinen explained) to change the value *minDataValue and *maxDataValue inside the functions

//Using pointer of pointer
void findMinAndMax(int array[], int size, int **min, int **max)
{
  int *smallest = &array[0];
  int *largest = &array[0];

  min = &smallest;
  max = &largest;

  for (int i = 1; i < size; i++)
  {
    if (array[i] > *largest){
      *largest = array[i];
    }
    if (array[i] < *smallest){
      *smallest = array[i];
    }
  }

  // testing code
  cout << **min << endl;
  cout << **max << endl;
}

int *makeFrequency (int data[], int dSize, int *minDataValue, int    *maxDataValue)
{
findMinAndMax(data, dSize, &minDataValue, &maxDataValue); 
}

答案 1 :(得分:0)

你可以把函数带到指针指针:

int *makeFrequency (int data[], int dSize, int **minDataValue, int **maxDataValue)

然后修改

* minDataValue和    * maxDataValue

在函数内部。在这种情况下,调用代码必须明确地传递指向指针的指针:

int *min, *max;
makeFrequency (data, size, &min, &max)

第二种可能性是将引用传递给指针:

int *makeFrequency (int data[], int dSize, int*& minDataValue, int    *& maxDataValue)

在这种情况下,您只需修改函数内部的指针并传递指向函数的指针。

我更喜欢第一种方式,因为那时调用代码也看起来不同,所以指针可能在函数内被修改的事实也可以从调用代码中看到。

答案 2 :(得分:0)

有两种方法可以实现它。我会举一个涉及函数&amp;指针。

void f1 (int** p)    // argument is pointer to pointer
{
}

void f2 (int*& p)   // argument is reference to pointer
{
}

int main()
{
    int x = 5;
    int* p = &x;
    f1 (&p);  // pass address of pointer
    f2 (p);   // pass reference (C++ type) of pointer
    return 0;
}
f1不同,

CC++更多f2。我喜欢f2因为我觉得它是type safe&amp;更有说服力的是reference。此外pointers是狂野的&amp;不应该被搞砸了,同样适用于pointers to pointers !!!!