繁体   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