参照による受け渡し は、呼び出す方の関数の引き数の値が、 呼び出される関数の中で変更できる、引き数受け渡しのメソッドを指しています。
参照によって引き数を渡すには、対応するパラメーターを
ポインター型を使用して宣言します。
C++ の参照により引き数を受け渡すためには、対
応するパラメーターは、ポインター型だけではなく、任意の参照型を使用して構いません。
次の例は、参照によって引き数がどのように渡されるかを示しています。 この関数を呼び出すと、参照パラメーターが実引き数によって初期化されることに注意してください。
#include <stdio.h> void swapnum(int &i, int &j) { int temp = i; i = j; j = temp; } int main(void) { int a = 10; int b = 20; swapnum(a, b); printf("A is %d and B is %d¥n", a, b); return 0; }
関数 swapnum() の呼び出し時に、変数 a および b の実際の値は、 参照によって渡されているため、交換されます。 出力は次のとおりです。
A is 20 and B is 10
実引き数の値を関数 swapnum() で変更させるには、swapnum() のパラメーターを参照として定義する必要があります。
const で修飾されている参照を変更するためには、const_cast 演算子を使用して、
その const 型をキャストする必要があります。
次の例は、このことを示しています。
#include <iostream> using namespace std; void f(const int& x) { int* y = const_cast<int>(&x); (*y)++; } int main() { int a = 5; f(a); cout << a << endl; }
この例では 6 を出力します。
ポインター・パラメーターによって、非定数オブジェクトの値を変更することができます。 次の例は、このことを示しています。
#include <stdio.h> int main(void) { void increment(int *x); int count = 5; /* address of count is passed to the function */ increment(&count); printf("count = %d¥n", count); return(0); } void increment(int *x) { ++*x; printf("*x = %d¥n", *x); }
次に、上記のコード出力を示します。
*x = 6 count = 6
例では、count のアドレスを increment() に渡します。 関数 increment() は、ポインター・パラメーター x によって、count を増分します。
関連参照