c# - 带有指针的不安全 C# 代码片段

标签 c# pointers

我遇到了以下代码片段,需要预测输出。我的答案是 220,但被告知错误。谁能告诉我正确的输出并请解释原因。

using System;
class pointer
{
  public static void Main()
  {
   int ptr1=0;
   int* ptr2=&ptr1;
   *ptr2=220;
   Console.WriteLine(ptr1);
  }
}

编辑: 谢谢大家的解释性答案。当且仅当上面的代码块(这是 C# 代码,很抱歉没有在问题中提及它)被声明为非托管时,正确答案肯定是 220。谢谢你所有的回答。他们中的每一个人都提供了很多有用的信息和帮助。

最佳答案

答案是它不编译。您将收到以下错误:

错误 CS0214:指针和固定大小的缓冲区只能在不安全的上下文中使用

但是,如果您这样写:

int ptr1 = 0;

unsafe {
    int* ptr2 = &ptr1;
    *ptr2 = 220;
}

Console.WriteLine(ptr1);

那么你确实会得到220。

您还可以创建一个完整的不安全方法,而不是创建特定的不安全 block :

public unsafe void Something() {
    /* pointer manipulation */
}

注意:您还必须使用/unsafe 开关进行编译(在 Visual Studio 的项目属性中选中“允许不安全代码”)

编辑:看看Pointer fun with binky获取有关指针的简短、有趣但内容丰富的视频。

关于c# - 带有指针的不安全 C# 代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127377/

相关文章:

c - 我的单链表代码有什么问题?

c++ - 非标准语法 - 使用 & 创建指向成员 : C++ function pointer to member 的指针

c - 为什么在这种情况下我必须将指针传递给指针

c - 指针算术问题 - 尝试对输入字符串进行标记

c# - 可查询 : reuse query in a different context

c# - 具有返回类型的方法的线程池

javascript - 如何使用我的数据库条目创建下拉列表?

c++ - 指向寄存器地址的指针

c# - 为 ASP .NET MVC 创建单元测试时出现的问题

c# - 以编程方式打开 ComboBox DropDown