C++ 参照渡し:ポインターの使用 [例あり]
C++ 参照渡し:ポインターの使用 [例あり]
このチュートリアルでは、例を使用して関数への引数としてポインターを渡すための参照による C++ 呼び出しについて学習します。
C++ 関数のチュートリアルでは、関数に引数を渡すことについて学びました。実際の値が渡されるため、この方法は値渡しと呼ばれます。
ただし、引数の実際の値が渡されない関数に引数を渡す別の方法があります。代わりに、値への参照が渡されます。
たとえば、
// function that takes value as parameter
void func1(int numVal) {
// code
}
// function that takes reference as parameter
// notice the & before the parameter
void func2(int &numRef) {
// code
}
int main() {
int num = 5;
// pass by value
func1(num);
// pass by reference
func2(num);
return 0;
}
&
に注意してください void func2(int &numRef)
で .これは、変数のアドレスをパラメータとして使用していることを示しています。
func2()
を呼び出すと、 main()
の関数 変数 num を渡すことによって 引数として、実際には num のアドレスを渡しています 値 5 の代わりに変数 .

例 1:ポインターを使用しない参照渡し
#include <iostream>
using namespace std;
// function definition to swap values
void swap(int &n1, int &n2) {
int temp;
temp = n1;
n1 = n2;
n2 = temp;
}
int main()
{
// initialize variables
int a = 1, b = 2;
cout << "Before swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
// call function to swap numbers
swap(a, b);
cout << "\nAfter swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
出力
Before swapping a = 1 b = 2 After swapping a = 2 b = 1
このプログラムでは、変数 a を渡しました と b swap()
に 関数。関数定義に注目してください。
void swap(int &n1, int &n2)
ここでは &
を使用しています 関数がパラメーターとしてアドレスを受け入れることを示すために。
したがって、コンパイラは、実際の値の代わりに、変数の参照が関数パラメーターに渡されることを識別できます。
swap()
で 関数、関数パラメータ n1 と n2 変数 a と同じ値を指しています と b それぞれ。したがって、交換は実際の値で行われます。
ポインターを使用して同じタスクを実行できます。ポインターについて学習するには、C++ ポインターを参照してください。
例 2:ポインターを使用した参照渡し
#include <iostream>
using namespace std;
// function prototype with pointer as parameters
void swap(int*, int*);
int main()
{
// initialize variables
int a = 1, b = 2;
cout << "Before swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
// call function by passing variable addresses
swap(&a, &b);
cout << "\nAfter swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
// function definition to swap numbers
void swap(int* n1, int* n2) {
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
出力
Before swapping a = 1 b = 2 After swapping a = 2 b = 1
ここで、出力が前の例と同じであることがわかります。行に注意してください、
// &a is address of a
// &b is address of b
swap(&a, &b);
ここでは、変数ではなく、変数のアドレスが関数呼び出し中に渡されます。
値の代わりにアドレスが渡されるため、逆参照演算子 *
そのアドレスに格納されている値にアクセスするには、 を使用する必要があります。
temp = *n1;
*n1 = *n2;
*n2 = temp;
*n1
そして *n2
アドレス n1 に格納されている値を与える と n2
n1以降 と n2 a のアドレスを含む と b 、すべてが *n1
に対して行われます および *n2 a の実際の値を変更します と b .
したがって、 a の値を出力すると と b main()
で 関数、値が変更されます。
C言語