如果我有一个接受 int *&
的函数,那意味着什么?如何将只是一个 int 或指向 int 的指针传递给该函数?
function(int *& mynumber);
无论何时我尝试将指针传递给该函数,它都会显示:error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'
如果我有一个接受 int *&
的函数,那意味着什么?如何将只是一个 int 或指向 int 的指针传递给该函数?
function(int *& mynumber);
无论何时我尝试将指针传递给该函数,它都会显示:error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'
这是一个指向int类型的指针的引用。这意味着相关函数可以修改指针本身以及指针所指向的int。
您只需传入指针即可,唯一的复杂之处在于指针需要是l-value而不仅仅是r-value,例如:
int myint;
function(&myint);
仅使用 "alone" 并不足够,0/NULL 也是不允许的,而:
int myint;
int *myintptr = &myint;
function(myintptr);
这种情况是可以接受的。当函数返回时,myintptr
很可能不再指向它最初指向的内容。
int *myintptr = NULL;
function(myintptr);
如果函数期望在给定空指针时分配内存,那么这也可能是有意义的。检查提供给函数的文档(或者阅读源代码!),以了解指针的使用预期。
简单来说:指针的引用。
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'
#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;
}
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;
}
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;
}