有时候,函数的确需要修改指针参数,使得该指针指向一个新的位置,程序员也需要这样的修改,来影响实参。这就是以指针作为参数的唯一情况!
参考:《数据结构与面向对象程序设计》(C++版)Michael Main等编著
下面的例子创建了一个名为allocate_doubles的函数,它为一个新的动态数组分配内存。下面是该函数的原型:
void allocate_doubles(double*& p,size_t& n);
参数p是一个指向double类型的指针(也就是double*),而且,它还是一个引用参数(由符号由&表明)。因此,其完整的参数类型就是double *&。
void allocate_double(double*& p, size_t& n)
{
cout << "How many doubles should I allocate" << endl;
cout << "Please type a positive integer answer: ";
cin >> n;
p = new double[n];
}
在函数的实现中,参数p被修改,使得它指向了一个新数组。在程序中,我们可以使用allocate_double函数来为含有double值的数组分配内存,其中,数组的大小由用户交互确定。
double* numbers;
size_t array_size;
allocate_double(numbers, array_size);
在这个示例中,allocate_doubles函数将询问用户,该为多少个 double数字分配内存。用户的回答将用于设置参数array_size,然后函数为所需大小的数组分配内存。因为哈数使其形参p指向了新分配内存的double类型数组,而且希望实参umbers也指向这个新分配的内存,因此,这里就需要使用引用引用参数。
完整代码:
#include<iostream>
using namespace std;
void allocate_double(double*& p, size_t& n);
int main()
{
double* numbers;
size_t array_size;
allocate_double(numbers, array_size);
}
void allocate_double(double*& p, size_t& n)
{
cout << "How many doubles should I allocate" << endl;
cout << "Please type a positive integer answer: ";
cin >> n;
p = new double[n];
}
参考:《数据结构与面向对象程序设计》(C++版)Michael Main等编著