0

C で値を参照渡ししたいのですが、この 2 つの関数は同じですか? 違いはどれですか?C++でも同じですか?

void foo1(int * val1, int * val2)

void foo2(int &val1, int &val2)

ありがとう、

4

5 に答える 5

4

参照は C++ のみです (C ではありません)。

参照の逆参照は C++ でのポインターの逆参照とは異なるため、メソッドの実装は異なります。

例えば

ref.method();

対。

ptr->method();

どちらの場合も、コピーではなく、メソッドに渡された元のオブジェクトを呼び出しています。

于 2012-08-07T11:42:31.180 に答える
1

2 番目は C ではなく、C++ のみです。参照渡しは、値のアドレスを渡すことによって C でエミュレートされます。

于 2012-08-07T11:41:41.910 に答える
1

C では、C++ のような参照演算子がないため、foo2 を実行できません。C++ でも同じではありません。参照は NULL にすることはできず、定数です。初期化後に別の場所を指すことはできません。

于 2012-08-07T11:44:20.583 に答える
1

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 では機能しません。

于 2012-08-07T11:49:37.773 に答える
0

C では、参照渡しはありません。代わりに、アドレスをポインターに渡すことができます。これにより、本質的に、渡された変数の値を変更できます。

2 番目の関数は C++ です。

2 つの関数の署名は異なりますが、1 つの関数で同じタスクを実行できます。

于 2012-08-07T13:50:46.267 に答える