如果我的函数需要int *&
,这意味着什么?如何只将int或指针int传递给该函数?
function(int *& mynumber);
每当我尝试将指针传递给该函数时,它会说:
error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'
答案 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;
}