[英]What does *& mean in a function parameter
如果我有一個接受int *&
的函數,它意味着什么? 如何只將int或指針int傳遞給該函數?
function(int *& mynumber);
每當我嘗試將指針傳遞給該函數時,它會說:
error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'
它是對指向int的指針的引用。 這意味着有問題的函數可以修改指針以及int本身。
你可以只傳入一個指針,一個復雜因素是指針需要是一個l值,而不僅僅是一個r值,所以例如
int myint;
function(&myint);
單獨是不夠的,也不允許0 / NULL,其中:
int myint;
int *myintptr = &myint;
function(myintptr);
是可以接受的。 當函數返回時, myintptr
很可能不再指向它最初指向的內容。
int *myintptr = NULL;
function(myintptr);
如果函數在給定NULL指針時期望分配內存,那么也可能有意義。 查看函數提供的文檔(或閱讀源代碼!),了解如何使用指針。
簡單地說:對指針的引用。
在沒有引用的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'
它表示對指向int的指針的引用。 換句話說,該函數可以將參數更改為指向其他內容。
要傳入變量,只需傳遞一個int *。 正如阿伍德蘭所指出的那樣,傳入的內容必須是l值 。
編輯:
以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;
}
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.