1

次のような構造体がある場合:

struct node
{
  int key_value;
  struct node *left;
  struct node *right;
};

そして、私は次のような検索機能を持っています:

struct node *search(int key, struct node *leaf)
{
  if( leaf != 0 )
  {
      if(key==leaf->key_value)
      {
          return leaf;
      }
      else if(key<leaf->key_value)
      {
          return search(key, leaf->left);
      }
      else
      {
          return search(key, leaf->right);
      }
  }
  else return 0;
}

値をリーフと比較するときに、検索関数内で次のことを行うのではなく、なぜですか。

key < (*leaf)->key_value

終わらせるkey < leaf->key_value

ポインターを残しませんか?したがって、最初にポインタを逆参照してから、値にアクセスする必要がありますか?

したがって、関数にアドレスを渡します。最初にそのアドレスを指すコンテンツを取得してから、値(key_value)を取得する必要がありますか?

4

2 に答える 2

4

ポインタが逆参照されています。leaf-> key_valueは(* leaf).key_valueと同等です。矢印演算子は、ポインターの間接参照を意味します。

于 2013-02-14T11:42:16.250 に答える
0

leafはすでにポインタ(関数のパラメータを観察することで確認できます)であり、単語自体が言うように、ポインタは正しいメモリ領域を直接指します。

->演算子はそれを逆参照し、保存された値にアクセスできるようにします

于 2013-02-14T11:42:31.617 に答える