我已经在列表上实现了操作,其中一个是添加,因为我不想返回任何东西,我读到我必须使用**,它可以工作,但我在另一个地方看到它被传递为*&,但我不知道区别
addNode(node*&head,int value)addNode(node**head,int value)
有什么区别,哪一个更好,还是意味着相同?我知道第二个是指向指针的指针.
谢谢
Mar*_*ers 20
first(**)是指针的指针,second(*&)是指针的引用.
引用和指针在概念上非常相似.但是有一些重要的区别,例如:
有关更多差异,请参阅此相关问题:
附:
addNode( node *&head, int value)
Run Code Online (Sandbox Code Playgroud)
...类型head是"指向节点的指针".
附:
addNode(node **head, int value)
Run Code Online (Sandbox Code Playgroud)
...类型是"指向节点的指针".
指针和引用不是一回事.考虑引用的简单方法是作为解引用指针.
您需要不同的语法来调用这两个版本:
node* my_node = 0;
addNode(my_node, 0); // syntax for first version
addNode(&my_node, 0); // syntax for 2nd version
Run Code Online (Sandbox Code Playgroud)
也存在语义差异.传递指针时,可以传递NULL.当您传递参考时,您不能.这是一个将ref-to-ptr混淆了一点的函数,所以让我们稍微改变一下这个问题:
void make_string(string& str_ref)
{
str_ref = "my str";
}
void make_string_again(string* str_ptr)
{
*str_ptr = "my other string";
}
Run Code Online (Sandbox Code Playgroud)
这两个完成相同的事情,但一个接受string引用而另一个接受一个string指针.如果你这样做:
string str;
make_string(str); // OK
make_string_again(&str); // OK - &str is a pointer to a real string
make_string_again(0); // Not OK - compiles but will crash when function dereferences the null pointer
Run Code Online (Sandbox Code Playgroud)
您可以看到make_string使用空指针调用变得困难(但并非不可能).这可以帮助你,你希望实现的情况下更好的功能make_string将永远不会有一个无效的对象调用.
| 归档时间: |
|
| 查看次数: |
19934 次 |
| 最近记录: |