C#中的指针是否像C++一样?安全吗?

mas*_*ani 45 c# c++ tree data-structures

我正在编写一个使用树数据结构的应用程序.我用C++编写它,现在我想用C#编写它.我使用指针来实现树数据结构.C#中还有一个指针吗?使用它安全吗?

Dan*_*ker 41

如果您使用C#(或Java或许多其他语言)实现树结构,则使用引用而不是指针.NB.C++中的引用与这些引用不同.

用法大部分类似于指针,但有垃圾收集等优点.

class TreeNode
{
    private TreeNode parent, firstChild, nextSibling;

    public InsertChild(TreeNode newChild)
    {
        newChild.parent = this;
        newChild.nextSibling = firstChild;
        firstChild = newChild;
    }
}

var root = new TreeNode();
var child1 = new TreeNode();
root.InsertChild(child1);
Run Code Online (Sandbox Code Playgroud)

兴趣点:

  • *在声明成员时无需修改类型
  • 无需在构造函数中将它们设置为null(它们已经为null)
  • 没有->成员访问的特殊操作员
  • 无需编写析构函数(尽管查找IDisposable)

  • @Joachim - 让我们都祈祷他通常不会在他的树形结构中使用指针算法. (19认同)
  • 这个答案没有解决实际问题.从谷歌搜索来到这里,幸运的是其他人实际上回答了这个问题...... (5认同)

Pra*_*are 33

YES.C#中有指针.

.他们是不是安全的.

unsafe在C#中使用指针时,实际上必须使用关键字.

有关示例,请查看此处MSDN.

static unsafe void Increment(int* i)
{
    *i++;
}

Increment(&count);
Run Code Online (Sandbox Code Playgroud)

使用此代码,代码将是安全和清洁.

static void Increment(ref int i)
{
    i++;
}

Increment(ref count);
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 20

C#中也有指针吗?

是的,使用语法声明int* varName;.

使用那个安全吗?

没有指针是不安全的.

有一些安全的方法可以构建一个没有指针的数据结构.如果节点是类,那么它们将自动成为引用类型,因此您不需要任何指针.否则,您可以将它们装入参考.