私は C++ で小さな AVL ツリー クラスを作成していますが、ここでポインターと少し混同されており、かなり奇妙な動作をしています。
クラスには、 node へのポインターである「root」という名前の変数があります。ある時点で、このオブジェクトのポインターを次の関数に渡します。
template <class T> void AVL<T>::RRotate(Node ** node) {
std::cout << this->root << std::endl << *node << std::endl;
*node = (*node)->left;
std::cout << this->root << std::endl << *node;
}
(「左」はノードへのポインタを含むフィールドであることに注意してください)。
これで、最初の印刷では常に同じメモリ位置が印刷されます。
ただし、2 番目の呼び出しでは、this->root と *node の別のディレクトリが出力されます。
どうしてこれなの?「*node = (*node)->left;」を設定すると、node は単にそのポインターへのポインターであるため、this->root も変更するべきではありませんか?
私は少し混乱しています。
どんな助けでも大歓迎です!
編集:サンプル出力は次のとおりです。
0x902a88
0x902a88
0x902a88
0x902aa8
編集 2: &this->root と node を出力すると、それらが常に同じ値であることが明らかになるため、ポインターが正しい場所を指しているように見えます。