可能重复:
Difference between pointer to a reference and reference to a pointer
我是C ++的新手,我从事一个非常复杂的项目。当我试图找出一些东西时,我看到了一件有趣的事情:
n->insertmeSort((Node *&)first);
当我们深入了解insertmeSort时,我们可以看到相同的内容:
void Node::insertme(Node *&to)
{
if(!to) {
to=this;
return;
}
insertme(value>to->value ? to->right : to->left);
}
所以我的问题的原因是:Node *&
- 星号和&符号,为什么?
它看起来很棘手,对我来说很有趣。
答案 0 :(得分:1)
它是指针的引用。像任何常规引用一样,但底层类型是指针。
在引用之前,必须使用双指针完成引用指针(而且一些C-minded的人仍然会这样做,我偶尔会成为其中之一)。
为了避免有任何疑问,请尝试将其真正放入:
#include <iostream>
#include <cstdlib>
void foo (int *& p)
{
std::cout << "&p: " << &p << std::endl;
}
int main(int argc, char *argv[])
{
int *q = NULL;
std::cout << "&q: " << &q << std::endl;
foo(q);
return EXIT_SUCCESS;
}
输出(您的值会有所不同,但&amp; p ==&amp; q)
&q: 0x7fff5fbff878
&p: 0x7fff5fbff878
很有希望p
中的foo()
确实是对q
中指针main()
的引用。
答案 1 :(得分:1)
这不是一个技巧,它只是类型 - “指向Node
的指针”。
n->insertmeSort((Node *&)first);
调用insertmeSort
,其结果是将first
投射到Node*&
。
void Node::insertme(Node *&to)
声明insertme
将对Node
的指针作为参数的引用。
引用和指针如何工作的示例:
int main() {
//Initialise `a` and `b` to 0
int a{};
int b{};
int* pointer{&a}; //Initialise `pointer` with the address of (&) `a`
int& reference{a};//Make `reference` be a reference to `a`
int*& reference_to_pointer{pointer_x};
//Now `a`, `*pointer`, `reference` and `*reference_to_pointer`
//can all be used to manipulate `a`.
//All these do the same thing (assign 10 to `a`):
a = 10;
*pointer = 10;
reference = 10;
*reference_to_pointer = 10;
//`pointer` can be rebound to point to a different thing. This can
//be done directly, or through `reference_to_pointer`.
//These lines both do the same thing (make `pointer` point to `b`):
pointer = &b;
reference_to_pointer = &b;
//Now `b`, `*pointer` and `*reference_to_pointer` can
//all be used to manipulate `b`.
//All these do the same thing (assign 20 to `b`):
b = 20;
*pointer = 20;
*reference_to_pointer = 20;
}
答案 2 :(得分:0)
*&安培;表示您通过引用传递指针。因此,在这种情况下,您通过引用此函数传递指向对象的指针。如果没有参考,这条线就没有效果了
if(!to) {
to=this;
return;
}