次のステートメントのペアの違いは何ですか?
int i;
doSomethingWith(i);
と
int i;
doSomethingWith(&i);
C では、& はアドレス取得演算子です。したがって、最初の呼び出しで行うように のコピーを渡す代わりに、 、またはi
のアドレスを渡します。これは、関数がそれを直接変更できることを意味します。i
&i
関数は次のようになります。
void doSomethingWith (int *var);
これは、整数 (この場合は ) へのポインター (アドレスを保持するもの) を取ることを意味しますi
。次に、直接変更i
するには、関数で次のことができます。
*var = 5;
これは逆参照演算子であり、そのアドレスに実際に格納されているものを提供します。この呼び出しは、&i で渡すメモリ位置に格納されているものに 5 を割り当てます。
C の教科書では、ポインターについて説明するときに、これについて詳しく説明する必要があります。
最初に、iの値を渡します。2番目に、変数iのアドレスをメモリに渡します。
ポインタとそのようなものについてのこのビデオを見てください。