对于使用指针访问二叉树节点的内容感到困惑

时间:2013-02-14 11:41:04

标签: c pointers binary-tree

如果我有一个看起来像这样的结构:

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)吗?

2 个答案:

答案 0 :(得分:4)

指针被取消引用。 leaf-&gt; key_value等价于(* leaf).key_value。箭头操作符意味着取消引用指针。

答案 1 :(得分:0)

leaf是一个指针(您可以通过观察函数的参数来看到它),而指针就像单词本身所说的那样,将直接指向正确的内存区域。

->运算符将取消引用它,允许您访问存储值