*&在函数参数中表示

时间:2010-11-15 15:18:18

标签: c++ function parameters

如果我的函数需要int *&,这意味着什么?如何只将int或指针int传递给该函数?

function(int *& mynumber);

每当我尝试将指针传递给该函数时,它会说:

error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'

5 个答案:

答案 0 :(得分:21)

它是指向int的指针。这意味着有问题的函数可以修改指针以及int本身。

你可以只传入一个指针,一个复杂因素是指针需要是一个l值,而不仅仅是一个r值,所以例如

int myint;
function(&myint);

单独是不够的,0 / NULL也不允许,其中:

int myint;
int *myintptr = &myint;
function(myintptr);

是可以接受的。当函数返回时,myintptr很可能不再指向它最初指向的内容。

int *myintptr = NULL;
function(myintptr);
如果函数在给定NULL指针时期望分配内存,那么

也可能有意义。查看函数提供的文档(或阅读源代码!),了解指针的使用方式。

答案 1 :(得分:10)

简单地说:对指针的引用。

在没有引用的C中,“重定位”指针的传统方法是将指针传递给指针:

void c_find(int** p, int val); /* *p will point to the node with value 'val' */

在C ++中,这可以用引用语法表示,以避免尴尬的双重引用。

void cpp_find(int*& p, int val); // p will point to the node with value 'val'

答案 2 :(得分:7)

它表示对指向int的指针的引用。换句话说,该函数可以将参数更改为指向其他内容。

要传入变量,只需传递一个int *。正如阿伍德兰所指出的那样,传入的内容必须是l-value

修改

建立在awoodland的榜样上:

#include <iostream>

void foo(int*& var)
{
    delete var;
    var = new int;
}

int main(int argc, char* argv[])
{
    int* var = NULL;

    std::cout << var << std::endl;

    foo(var);   // this function can/will change the value of the pointer

    std::cout << var << std::endl;

    delete var;

    return 0;
}

答案 3 :(得分:2)

function只接受一个参数mynumber,该参数是对指向int的指针的引用。

当您需要将指针传递给函数时,这很有用,并且该函数可能更改指针。例如,如果您的功能是这样实现的:

function(int*& mynumber)
{
  if( !mynumber )
    mynumber = new int;
  *mynumber = 42;
}

...然后在调用代码中会发生类似这样的事情:

int main()
{
  int* mynumber = 0;
  function(mynumber); // function will change what "mynumber" points to
  cout << *mynumber;
  return 0;
}

答案 4 :(得分:0)

这是对int指针的引用 - 您必须将int的地址传递给此函数,并注意该函数可以通过引用更改指针。

哑巴的例子:

void func(int*& iref) 
{
    iref = new int;
}

int main()
{
    int i(0);
    int* pi(&i);

    func(pi);
    // pi no longer equal to &i

    return 0;
}