C++函数参数将指针的地址作为参数.这是怎么用的?它是为了什么?

Kor*_*gay 5 c++ pointers reference function

想象一下这样的函数:

 function(Human *&human){
      // Implementation
 }
Run Code Online (Sandbox Code Playgroud)

你能解释一下*&是什么吗?它将用于什么?与传递指针或引用有什么不同?你能给出一个小的解释性样本吗?

谢谢.

Aar*_*ron 7

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)

这样传递给函数的原始指针也会改变.

如果您理解"指针指针",那么想象一下,除非某些东西是引用,否则它可以被视为"非指针".

  • 它不是指针的引用.它是指向引用的指针,它无效.编辑:问题现在已修复,但您的答案却没有. (2认同)

Mus*_*urk 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;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

"采用指针的地址" - 不,它没有.它需要应该采取一个参考的指针.

但是,这是语法错误.你可能意味着什么

rettype function(Human *&human)
Run Code Online (Sandbox Code Playgroud)

(是的,它也缺少一个返回类型......)


0x4*_*2D2 5

既然你把这段代码写下来了,我会假设你打算做这样的事情:

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)

摘要(假设类型在参数中):

  1. T *:我们只能更改指针指向的对象的值.更改参数不会更改传递的指针.
  2. T *&:我们现在可以更改实际指针T以及它指向的对象的值*T.