ポインターの格納とその処理を処理する場合は、ポインターへのポインターが必要です。たとえば、基になるポインターの内容を変更します。例えば:
int i = 0, j = 1;
int* p = &i;
int** pp = &p;
の代わりにをp
指摘したい場合は、次のようにできます。j
i
*pp = &j; // equivalent to `p = &j;`
これは説明用です。現実の世界では、関数を扱うときにこれが必要です。
void Destroy (int** pp) { // for any int pointer
delete[] pp; // deallocate the memory
*pp = 0; // set the pointer to 0, so that it's not dangling
}
そしてそれを次のように使用します:
int* pi = new int[30];
...
Destroy(&pi); // `pi` is now pointing to 0
しかし、それでも C++ では、「ポインター参照」として優れた代替手段があります。これはほとんど同じことを行いますが、読みやすくなっています。
void Destroy (int*& p) { // for any `int` pointer
delete[] p; // destroy the memory
p = 0; // Null out the same pointer which was actually passed
}
使用:
Destroy(pi); // no need to pass address