Kor*_*gay 5 c++ pointers reference function
想象一下这样的函数:
function(Human *&human){
// Implementation
}
Run Code Online (Sandbox Code Playgroud)
你能解释一下*&是什么吗?它将用于什么?与传递指针或引用有什么不同?你能给出一个小的解释性样本吗?
谢谢.
void doSomething(int &*hi);
Run Code Online (Sandbox Code Playgroud)
不管用.你不能指向参考.但是,这个:
void doSomething(int *&hi); // is valid.
Run Code Online (Sandbox Code Playgroud)
它是指针的引用.这很有用,因为您现在可以将此指针传递给函数以指向其他"Human"类型.
如果您查看此代码,则将"hi"指向"someVar".但是,对于传递给此函数的原始指针,没有任何内容会发生变化,因为指针本身正在按值传递.
void doSomething(int *hi)
{
hi = &someVar;
}
Run Code Online (Sandbox Code Playgroud)
所以你这样做,
void doSomething(int *&hi)
{
hi = &someVar;
}
Run Code Online (Sandbox Code Playgroud)
这样传递给函数的原始指针也会改变.
如果您理解"指针指针",那么想象一下,除非某些东西是引用,否则它可以被视为"非指针".
它就像一个双指针.您通过引用传递指针,允许'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;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
"采用指针的地址" - 不,它没有.它需要应该采取一个参考的指针.
但是,这是语法错误.你可能意味着什么
rettype function(Human *&human)
Run Code Online (Sandbox Code Playgroud)
(是的,它也缺少一个返回类型......)
既然你把这段代码写下来了,我会假设你打算做这样的事情:
void f(T *&) {}
Run Code Online (Sandbox Code Playgroud)
此函数签名允许传递的指针变为可修改的,这是替代语法不允许的int *
.指针有效地通过引用传递,其他人在这里称之为.
有了这个语法,你现在可以修改实际的指针,而不是只是它指向到.例如:
void f(int *& ptr) {
ptr = new int;
}
int main() {
int * x;
f(ptr); // we are changing the pointer here
delete x;
}
Run Code Online (Sandbox Code Playgroud)
摘要(假设类型在参数中):
T *
:我们只能更改指针指向的对象的值.更改参数不会更改传递的指针.T *&
:我们现在可以更改实际指针T
以及它指向的对象的值*T
. 归档时间: |
|
查看次数: |
2245 次 |
最近记录: |