什么是Node *&阳极?

时间:2011-10-26 17:33:55

标签: c++ linked-list

在以下代码中:

void insert(Node *& aNode, int x) {
  if (!aNode) {
    aNode = new Node(x);
    aNode->next = aNode;
    return;
  }

  Node *p = aNode;
  Node *prev = NULL;
  do {
    prev = p;
    p = p->next;
    if (x <= p->data && x >= prev->data) break;   // For case 1)
    if ((prev->data > p->data) && (x < p->data || x > prev->data)) break; // For case 2)
  } while (p != aNode);   // when back to starting point, then stop. For case 3)

  Node *newNode = new Node(x);
  newNode->next = p;
  prev->next = newNode;
}

什么是Node *&amp;阳极?

我应该如何使用此功能,我的意思是,我应该传递哪种类型的参数?

1 个答案:

答案 0 :(得分:10)

我认为这段代码是C ++,而不是C,Node *&aNode是对Node指针的引用,所以你要将Node*传递给函数,函数会引用它(因此Node*所指向的内存位置可能会发生变化)。

您可能会发现the Wikipedia article on References (C++)很有趣。

一个简单的例子:

#include <iostream>
void addOneToValue(int num) {
    ++num;
}

void addOneToRef(int &num) {
   ++num;
}

int main() {
   int num = 0;

   // print 0
   std::cout << num << std::endl;

   // print 0 again (addOneToValue() has no effect)
   addOneToValue(num);
   std::cout << num << std::endl;

   // print 1 (addOneToRef() changes the value of num)
   addOneToRef(num);
   std::cout << num << std::endl;
}

@ crashmstr的评论提醒我,我应该说它们与指针有什么不同。 Wikipedia does a better job that I could though

  • 定义后无法直接引用参考对象;任何出现的名称都直接引用它引用的对象。
  • 创建引用后,以后无法引用其他对象;它不能重新安置。这通常用指针完成。
  • 引用不能为null,而指针可以为;每个引用都指某个对象,尽管它可能有效也可能无效。
  • 参考文献不能未初始化。由于无法重新初始化引用,因此必须在创建引用后立即初始化它们。特别是,必须在定义它们的地方初始化局部变量和全局变量,并且必须在类的构造函数的初始化列表中初始化作为类实例的数据成员的引用。
  • 大多数编译器都会支持空引用而没有太多抱怨,只有在尝试以某种方式使用引用时才会崩溃。