簡體   English   中英

通過引用函數傳遞指針參數是什么意思?

[英]What does it mean to pass a pointer parameter by reference to a function?

我在網上閱讀了一些代碼,發現它們傳遞了node*&而不僅僅是node* ,我真的不明白為什么。

我的理解是,當您希望將更改傳播回函數外部的原始變量(指針會這樣做)或者希望避免每次調用函數時都復制對象時,您可以通過引用傳遞參數避免復制開銷,這也是指針會做的事情。

我錯了還是他們錯了? 如果我是,我有什么問題?

當您通過引用傳遞時,它充當別名——無論是普通對象還是指針。

為了詳細解釋,讓我們考慮以下聲明:

int i = 10, *pi = &i;

下面是在各種函數中傳遞和使用它們的不同含義:

void foo_pointer (int* p) // 1st (can pass `&i` and `pi`)
{ 
  *p = 0;  // modifies `i`
   p = nullptr; // no effect on `pi`
}
void foo_pointer_reference (int*& p) // 2nd  (can pass `pi`)
{ 
  *p = 0;  // modifies `i`
   p = nullptr; // modifies `pi`
}
void foo_const_pointer_reference (const int*& p) // 3rd (can pass `pi`)
{ 
  *p = 0;  // ERROR
   p = nullptr; // modifies `pi`
}
void foo_const_pointer_const_reference (const int* const& p) // 4th (can pass `&i` and `pi`)
{ 
  *p = 0;  // ERROR
   p = nullptr; // ERROR
}

從上面的示例中,您可以看到將T*&聲明為函數參數的另一個用例是,它僅限制傳遞給該函數的指針。 即在上述情況下&i不允許傳遞給第二個和第三個函數。 但是pi可以傳遞給所有函數。

如果您希望調用的函數將指針更改為指向其他內容,則可以通過引用傳遞指針。 除此之外,我看不到任何正當理由(但這有時是正當理由)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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