どういう意味ですか?参照渡しの使用は、参照を渡すことであるため、戻り値を必要とせずに直接変更できることを理解しています。ポインター渡しも同様ですが、実行時間が遅くなります。ただし、 * & が何をするのかわかりません。たとえば、
foo(int * & var) { }
どういう意味ですか?参照渡しの使用は、参照を渡すことであるため、戻り値を必要とせずに直接変更できることを理解しています。ポインター渡しも同様ですが、実行時間が遅くなります。ただし、 * & が何をするのかわかりません。たとえば、
foo(int * & var) { }
参照によってポインターを渡すため、ポインターが指すものを変更し、それらの変更を呼び出し元に反映させることができます。
例えば:
void notByReference(int *p) {
p = nullptr;
}
void byReference(int *&p) {
p = nullptr;
}
int main() {
int *i = new int;
notByReference(i); //i is not changed since a copy of the pointer was passed
byReference(i); //i itself is changed, leaking memory
}
これにより、参照によってポインターを渡すことができます。これにより、関数はポインターを変更し、その変更を呼び出し元に表示する機会が与えられます。
そこで止まる必要はありません。たとえば、intへのポインタへのポインタを参照渡しできます。
void foo(int** &var)
型修飾子は類似しており、互いに独立していることに注意して&
ください*
。これはsome_type&
単に「への参照sometype
」を意味します。これは、関数が呼び出し元の引数のバージョンを認識し、それを変更できることを意味します。がポインターの場合sometype
、呼び出し元のバージョンの引数の型がポインターであり、関数がそのポインターを変更できることを意味します。