1. 程式人生 > >以指標作為引用引數

以指標作為引用引數

有時候,函式的確需要修改指標引數使得該指標指向一個新的位置,程式設計師也需要這樣的修改,來影響實參。這就是以指標作為引數的唯一情況!

參考:《資料結構與面向物件程式設計》(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等編著