检查NULL值C ++的引用

时间:2015-10-13 05:27:34

标签: c++ pointers reference pass-by-reference

我已经读过“检查引用是否等于null在C ++中没有意义” - 因为引用永远不会有空值。但是,我看到这个陈述并不适用于我提出的以下示例:

void InsertNode(struct node*& head, int data)
{
    cout << head << endl;

    node* temp = new node();
    temp->data = data;
    temp->next = NULL;

    if (head == NULL)
        head = temp;
    else
    {
        temp->next = head;
        head = temp;
    }
}

我正在检查if (head == NULL)。即使将head作为参考传递,我也会检查它是否等于NULL。这与我在“C ++中检查引用是否等于null无关”这句话的说法相矛盾 - 如果我的理解是对的,请解释一下吗?感谢。

1 个答案:

答案 0 :(得分:7)

您不会检查引用是否为null,但它是否引用了空指针,这是不同的。

也许一个例子会有所帮助:

int i = 42;
// check if a variable is null
if (i == 0) print("i is null");

// pointer
int* pi = &i;
// check if a pointer is null
if (pi == 0) print("pi is null");
// check if a pointer points to a null
if (*pi == 0) print("i is null");

// reference
int& ri = i;
// check if a reference refers to a null
if (ri == 0) print("i is null");

对引用的另一种描述可能会有所帮助:引用是一种自解引用的非空指针。这意味着您永远不必编写*pi来获取它指向的对象,而只需ri。这也意味着它保证是非空的。请注意,您可以编写破坏此保证的程序,但这些程序无论如何都会导致所谓的未定义行为,因此不值得为此烦恼,因此最初会使您感到困惑的声明。