想象一下这样的功能:C++函数参数将指针的地址作为参数。这是如何使用的?它是为了什么?
function(Human *&human){
// Implementation
}
你能解释一下究竟是什么一个* &是什么?它将用于什么?与传递指针或引用不同,它有什么不同?你可以给一个小的解释性样本吗?
谢谢。
想象一下这样的功能:C++函数参数将指针的地址作为参数。这是如何使用的?它是为了什么?
function(Human *&human){
// Implementation
}
你能解释一下究竟是什么一个* &是什么?它将用于什么?与传递指针或引用不同,它有什么不同?你可以给一个小的解释性样本吗?
谢谢。
它就像一个双指针。你通过引用传递指针,允许'函数'函数修改指针的值。
例如“人”可以指向杰夫和功能可以修改它指向安。
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;
}
“需要一个指针的地址” - 不,事实并非如此。它需要应该采取reference一个指针。
然而,这是一个语法错误。你大概意思是
rettype function(Human *&human)
(是的,它也缺少一个返回类型...)
他们可能也想要一个返回类型。 – juanchopanza
@ juanchopanza是的,当然,补充说。 – 2012-12-20 21:14:47
void doSomething(int &*hi);
将无法正常工作。你不能指向引用。但是,这是:
void doSomething(int *&hi); // is valid.
它是对指针的引用。这非常有用,因为现在您可以将此指针传递给函数以指向其他“Human”类型。
如果你看看这个代码,它指向“嗨”到“someVar”。但是,对于传递给这个函数的原始指针,没有什么会改变,因为指针本身是按值传递的。
void doSomething(int *hi)
{
hi = &someVar;
}
所以,你这样做,
void doSomething(int *&hi)
{
hi = &someVar;
}
这样传递给函数的原始指针被改变了。
如果你懂的“指针的指针”,那么试想一下,除了当事情是它可以像“非指针”来处理的参考。
它不是对指针的引用。这是一个指向参考的指针,它是无效的。编辑:现在问题已经修复,但你的答案不是。 –
我改变了我的问题。抱歉。 –
@sftrabbit我也注意到了。我改变了我的答案。谢谢。 – Aaron
即使它看起来就像地址的运营商,它不是 - 这是一个基准参数。当您希望能够更改呼叫方的值时,请使用参考。在这种情况下,指针可能在函数中被设置或更改。
既然你写了这个代码把你的头顶,我会假设你打算做这样的事情:
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
对象的值。谢谢。所以如果我传递一个指向函数的指针,我不能改变它指向什么?但我可以改变它指向的价值?但现在我也可以改变它指向什么..谢谢我想我理解它。 –
你可以改变它指向(指向安,而不是杰夫)和东西它指向的数据:void函数(人*人){人 - > SetAge(35); } –
@KorayTugay使用此语法,您可以更改指针指向的内容以及它指向的对象的值。只是做'void f(int *){..}'将会把我们限制在只有**的地方,能够改变它指向的对象的值,而不是指针指向的对象。你需要更清楚的解释吗? – 0x499602D2
您应该看到引用的类型为“以'人*'参考”,而不是“一个'*'来'Human'”,那么一切都变得清晰:这是一个指针类型的(指针本身,而不是存储在它后面)可以通过引用进行修改。就像引用的类型是一个“黑盒子”,就像你使用typedef或类似的东西那样。 – leemes