ポインタを参照パラメータとする(一)
1668 ワード
場合によっては、関数がポインタパラメータを変更して、ポインタが新しい位置を指すようにする必要があります.プログラマも、実パラメータに影響を与えるために、このような変更が必要です.これがポインタをパラメータとする唯一のケースです!
参考:『データ構造とオブジェクト向けプログラミング』(C++版)Michael Mainほか
次の例ではallocateという名前を作成します.doublesの関数で、新しい動的配列にメモリを割り当てます.次に、関数のプロトタイプを示します.
パラメータpはdoubleタイプを指すポインタ(すなわちdouble*)であり、参照パラメータ(記号によって&で表される)でもある.したがって、その完全なパラメータタイプはdouble*&です.
関数の実装では、パラメータpが変更され、新しい配列を指すようになった.プログラムではallocateを使用できますdouble関数は、double値を含む配列にメモリを割り当てます.配列のサイズはユーザーがインタラクティブに決定します.
この例ではallocate_doubles関数は、メモリをどのくらいのdouble数値に割り当てるかをユーザーに尋ねます.ユーザーの回答はパラメータarrayの設定に使用されます.size、関数は、必要なサイズの配列にメモリを割り当てます.ハ数は、そのパラメータpが新しい割り当てメモリのdoubleタイプ配列を指すようにし、実パラメータumbersもこの新しい割り当てメモリを指すようにするため、ここでは参照参照パラメータを使用する必要があります.
完全なコード:
参考:『データ構造とオブジェクト向けプログラミング』(C++版)Michael Mainほか
参考:『データ構造とオブジェクト向けプログラミング』(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ほか