ポインタを参照パラメータとする(一)


場合によっては、関数がポインタパラメータを変更して、ポインタが新しい位置を指すようにする必要があります.プログラマも、実パラメータに影響を与えるために、このような変更が必要です.これがポインタをパラメータとする唯一のケースです!
参考:『データ構造とオブジェクト向けプログラミング』(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
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ほか