指针和引用的新功能因此我对此并不十分清楚,但我试图传递指针* 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);
}
答案 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
不同, C
比C++
更多f2
。我喜欢f2
因为我觉得它是type safe
&amp;更有说服力的是reference
。此外pointers
是狂野的&amp;不应该被搞砸了,同样适用于pointers to pointers
!!!!