参照による引き数の受け渡し

参照による受け渡し は、呼び出す方の関数の引き数の値が、 呼び出される関数の中で変更できる、引き数受け渡しのメソッドを指しています。

C 参照によって引き数を渡すには、対応するパラメーターを ポインター型を使用して宣言します。

C++ 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() のパラメーターを参照として定義する必要があります。

C++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 を増分します。

関連参照

IBM Copyright 2003