6

以下のうち、間違っているものを教えてください。

ポインターが何らかのタイプのアドレスを表すことは私の理解です。

したがって、int i = 18それへのポインタはint *pI = &i;

次の 2 つの宣言が有効です

void foo (int &something) // Will accept an address of something
void bar (int *something) // Will accept a pointer to something

関数を次のように宣言すると、

void bar (int *something)

何かへのポインターを送信する方がよいでしょう。確かに、foo(pI)動作します。

同じロジックに従って、

void foo (int &something)

引数として int を指す何かのアドレスを送信する必要があるため、次のようになります。

なぜfoo(&i)間違っているのですか?

4

5 に答える 5

5

void foo (int &something) // Will accept an address of something

これは正しくありません:int&referenceであり、特定の点でポインタに似ている概念ですが、まったく同じではありません。

参照は、ポインターを介して値を変更できるように、参照を介して値を変更できるという点でポインターに似ています。ただし、「null 参照」などというものはありませんが、NULL ポインターは非常に一般的です。

参照を取る関数を呼び出すときは、取得する参照を変数に渡すだけ&です。演算子は必要ありません。

void foo (something); // "something" must be a variable
于 2012-08-07T01:51:13.930 に答える
2

宣言は、ポインターではなく、参照変数void foo (int &something)を取ります。

を呼び出す場合とまったく同じように呼び出しますが、値ではなく参照によって渡されるvoid foo (int something)somethingが異なります。

于 2012-08-07T01:51:54.850 に答える
0

void foo (int &something) // 何かのアドレスを受け入れる

いいえ、混乱は理解できますが。その関数は への参照を取りますint。適切に定義されたプログラムでは、参照が null でないことが保証されます。概念的にはポインターに似ていますが、意味的には異なります。

その関数を呼び出すために、特別なことをする必要はありません。

int i = 10;
foo(i);  // passed to foo by reference
于 2012-08-07T01:52:09.420 に答える
0

C++ では&は、ここで使用しているように、関数プロトタイプのコンテキストで「参照型」を意味するためです。あなたの機能:

void foo (int &something)

実際には整数参照型を渡す必要があることを指定しているため、この関数を次のように呼び出すだけです。

foo(i);

この場合、iのアドレスを関数に渡していることに注意してください。

于 2012-08-07T01:53:02.703 に答える
0

には2 つの異なる意味があり&ます。

1 つ目は、既存の変数からポインターを作成することです。

2つ目は参考にすることです。

どちらも同じキャラクターを使用していますが、まったく別のものです。

于 2012-08-07T01:54:09.260 に答える