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

指针正在被取消引用。叶->key_value 等价于 (*leaf).key_value。箭头运算符意味着指针的取消引用。

于 2013-02-14T11:42:16.250 回答
0

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

->操作员将取消引用它,允许您访问存储的值

于 2013-02-14T11:42:31.617 回答