.NET中是否存在指针?

时间:2010-08-31 12:08:44

标签: c# .net pointers

我想知道.NET技术中是否存在指针。如果是,是否有任何C#指针示例?

请指导我。

9 个答案:

答案 0 :(得分:13)

是的,他们确实存在......

他们使用的一个例子......

答案 1 :(得分:5)

是的,指针存在。

引用实际上是指针,但它们在垃圾收集器知道它们的方式上是特殊的,并在它移动对象时更改它们。

指针可以用在不安全的代码中,但是你必须确保垃圾收集器不会移动你指向的东西。

示例:

string x = "asdf";
unsafe {
  fixed (char* s = x) {
    char* p = s;
    for (int i = 0; i < 4; i++) {
      Console.WriteLine(*p);
      p++;
    }
  }
}

请注意,必须使用fixed命令保护您希望通过指针访问的托管对象,并且编译器不会让您更改所获得的指针,因此如果你想要一个可更改的指针,你必须复制它。

您需要在项目设置中启用不安全的代码才能使用unsafe关键字。

答案 2 :(得分:4)

答案 3 :(得分:2)

是的,它们只是有限的,请查看MSDN上的this article

答案 4 :(得分:2)

是的,如果您执行unsafe代码,则可以使用指针。有关详细信息,请参阅此MSDN部分:Unsafe Code and Pointers (C# Programming Guide)

答案 5 :(得分:1)

是的,他们存在。你可以写unsafe code

答案 6 :(得分:1)

是的,他们这样做。您可以从this链接开始。

答案 7 :(得分:1)

亥, 我们可以在.net中使用的指针,但由于自动垃圾收集,框架不支持指针。因此,我们将其编写为非托管代码。要使用非托管代码,请转到project properties->build -> and enable allow unsafe code.

样品:

 class UnsafeCode
{
    //mark main as unsafe
    unsafe public static void Main()
    {
        int count = 99;
        int* pointer;   //create an int pointer. 
        pointer = &count;   //put address of count into pointer

        Console.WriteLine( "Initial value of count is " + *pointer );
        *pointer = 10;  //assign 10 to count via pointer
        Console.WriteLine( "New value of count is " + *pointer);
        Console.ReadLine();
       }
}

答案 8 :(得分:1)

我会仔细查看你打算做什么,看看你是否在尝试用C#编写C ++代码。很少有unsafe代码是首选解决方案的实例。 C#的抽象级别高于C ++。因此,您可能需要考虑使用您正在使用的语言的习语。