簡體   English   中英

函數參數中的*和含義是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM