想象一下这样的函数:
function(Human *&human){
// Implementation
}
你能解释一下究竟是什么?&是什么?它将用于什么?与传递指针或引用有什么不同?你能给出一个小的解释性样本吗?
谢谢。
答案 0 :(得分:7)
void doSomething(int &*hi);
不起作用。你不能指向参考。但是,这个:
void doSomething(int *&hi); // is valid.
它是指针的引用。这很有用,因为您现在可以将此指针传递给函数以指向其他“Human”类型。
如果查看此代码,则将“hi”指向“someVar”。但是,对于传递给此函数的原始指针,没有任何内容会发生变化,因为指针本身正在按值传递。
void doSomething(int *hi)
{
hi = &someVar;
}
所以你这样做,
void doSomething(int *&hi)
{
hi = &someVar;
}
这样传入函数的原始指针也会改变。
如果您理解“指针指针”,那么想象一下,除非某些东西是引用,否则它可以被视为“非指针”。
答案 1 :(得分:6)
它就像一个双指针。您通过引用传递指针,允许'function'函数修改指针的值。
例如'human'可以指向Jeff,函数可以将其修改为指向Ann。
Human ann("Ann");
void function(Human *& human)
{
human = &ann;
}
int main()
{
Human jeff("Jeff");
Human* p = &jeff;
function(p); // p now points to ann
return 0;
}
答案 2 :(得分:5)
“获取指针的地址” - 不,它没有。 应该将reference带到指针。
但是,这是语法错误。您可能想要的是
rettype function(Human *&human)
(是的,它也缺少一个返回类型......)
答案 3 :(得分:5)
既然你把这段代码写下来了,我会假设你打算做这样的事情:
void f(T *&) {}
此函数签名允许传递的指针变为可修改的,这是替代语法int *
不允许的。指针有效地通过引用传递 ,其他人在这里称之为。
使用此语法,您现在可以修改实际指针,而不仅仅是指向 的指针。例如:
void f(int *& ptr) {
ptr = new int;
}
int main() {
int * x;
f(ptr); // we are changing the pointer here
delete x;
}
摘要(假设类型在参数中):
T *
:我们只能更改指针指向的对象的值。更改参数不会更改传递的指针。T *&
:我们现在可以更改实际指针T
以及它指向*T
的对象的值。答案 4 :(得分:4)
即使它看起来像地址运算符,但它不是 - 它是一个参考参数。如果希望能够在呼叫者端更改值,可以使用引用。在这种情况下,指针可能正在函数中设置或更改。