以指標作為引用引數
阿新 • • 發佈:2018-12-18
有時候,函式的確需要修改指標引數,使得該指標指向一個新的位置,程式設計師也需要這樣的修改,來影響實參。這就是以指標作為引數的唯一情況!
參考:《資料結構與面向物件程式設計》(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等編著