C で値を参照渡ししたいのですが、この 2 つの関数は同じですか? 違いはどれですか?C++でも同じですか?
void foo1(int * val1, int * val2)
void foo2(int &val1, int &val2)
ありがとう、
C で値を参照渡ししたいのですが、この 2 つの関数は同じですか? 違いはどれですか?C++でも同じですか?
void foo1(int * val1, int * val2)
void foo2(int &val1, int &val2)
ありがとう、
参照は C++ のみです (C ではありません)。
参照の逆参照は C++ でのポインターの逆参照とは異なるため、メソッドの実装は異なります。
例えば
ref.method();
対。
ptr->method();
どちらの場合も、コピーではなく、メソッドに渡された元のオブジェクトを呼び出しています。
2 番目は C ではなく、C++ のみです。参照渡しは、値のアドレスを渡すことによって C でエミュレートされます。
C では、C++ のような参照演算子がないため、foo2 を実行できません。C++ でも同じではありません。参照は NULL にすることはできず、定数です。初期化後に別の場所を指すことはできません。
void foo1(int * val1, int * val2)
void foo2(int &val1, int &val2)
どちらの場合も、関数にはアドレスが必要です。
2 つ目は C++ で使用されます。これを使用して、任意の変数の参照を渡すことができます。
たとえば、 のような変数があるとしますint num1 = 10, num2 = 20;
。
次にfoo2(&num1 , &num2 )
、C++ で foo2 が必要ですが、これは C では機能しません。
C では、参照渡しはありません。代わりに、アドレスをポインターに渡すことができます。これにより、本質的に、渡された変数の値を変更できます。
2 番目の関数は C++ です。
2 つの関数の署名は異なりますが、1 つの関数で同じタスクを実行できます。