簡體   English   中英

在指針參數上使用ref和out關鍵字

[英]Use the ref and out keyword on a pointer parameter

我正在學習C和C#,這個問題是針對C#的。 為什么要在指針上使用out和ref關鍵字? 使用指針,您可以直接訪問該變量。 我在msdn: 這里找到了這段代碼。

這是代碼:

static int value = 20;
public unsafe static void F(out int* pi1, ref int* pi2)
{
  int i = 10;
  pi1 = &i;
  fixed (int* pj = &value)
  {
     // ...
     pi2 = pj;
  }
}

為什么要在指針上使用out和ref關鍵字?

好吧,為什么您要使用out和ref關鍵字,period? 當您希望調用修改現有變量的方法時,可以使用out關鍵字。 當您希望調用讀取和修改現有變量的方法時,可以使用ref關鍵字。 變量是指針類型似乎並不特別相關。

如果您的問題實際上是“您能給我一個現實的代碼示例,您可能想通過ref傳遞指針類型的變量?” 那么我必須承認,在編寫C#代碼的十年中,我從未在生產代碼中使用過指針,並且很少使用ref,因此我沒有個人經驗中的示例。 我可以想象這樣的事情。 例如,想象一下傳統的C樣式雙向鏈接列表。 您可能會遇到這樣的情況,您既要讀取也要更改列表的頭和尾指針,並通過將ref Link*傳遞到頭和尾來做到這一點。

現在,您已經包含了找到該代碼的鏈接,我注意到它明確表示這是一個危險的代碼示例,您永遠不能編寫 因此,問您在什么情況下想編寫這樣的代碼是沒有道理的。 現在我看到了代碼的來歷,我真的不明白您的問題。 永遠不應編寫這樣的代碼; 這是樣品的整

為什么要在指針上使用out和ref關鍵字?

當您想提供指向函數調用者的指針時(在out的情況下),或者當您希望被賦予一個指針並可以選擇對其進行修改以指向不同的東西時(對於ref

如果您不需要更改指針 ,而只需要解除對指針的引用以查看其指向的對象,則可以按值而不是按引用傳遞指針,只要outref為未使用。

我從未在C#中使用過指針,但是我確實將ref參數與引用類型一起使用。 原因:意圖明確。 如果我看到一個采用ref參數的方法,我知道此參數將被突變,因此在此不會感到驚訝。

暫無
暫無

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

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