代码之家  ›  专栏  ›  技术社区  ›  masoud ramezani

C++中有指针,像C++吗?安全吗?

  •  43
  • masoud ramezani  · 技术社区  · 15 年前

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

    5 回复  |  直到 7 年前
        1
  •  39
  •   Daniel Earwicker    15 年前

    如果你用C语言(或Java,或许多其他语言)实现树结构,你会使用引用而不是指针。铌。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);
    

    兴趣点:

    • 无需修改类型 * 宣布成员时
    • 不需要在构造函数中将它们设置为空(它们已经为空)
    • 无特殊 -> 成员访问操作员
    • 无需编写析构函数(尽管查找 IDisposable )
        2
  •  29
  •   Pratik Deoghare    15 年前

    .C中有指针。

    .他们是 不是 安全。

    实际上你必须使用关键字 unsafe 当你在C中使用指针时。

    举个例子看 here MSDN .

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

    用这个代替,代码将是安全和干净的。

    static void Increment(ref int i)
    {
        i++;
    }
    
    Increment(ref count);
    
        3
  •  18
  •   kennytm    7 年前

    C中也有指针吗?

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

    使用那个保险箱吗?

    没有指针是 不安全 .

    有一些安全的方法可以构造没有指针的数据结构。如果节点是类,那么它们将自动 reference types 所以你不需要任何指针。否则,你可以 box them into a reference .

        5
  •  2
  •   Jason Short    15 年前

    在msdn上的.net 2中实现了大量的数据结构。

    Data Structures Part 1

    它们包括二进制搜索树、图表、skiplist、nodelist等的示例代码。代码非常完整,包含了许多关于这些结构工作原因的文档页面等。

    微软没有一个使用指针。一般来说,你不需要在C中使用它们。有时使用它们会很好,或者它们只是你从C++中思考的方式。但是你通常可以找到一种不使用它们的方法。

    不为指针使用不安全代码的最大原因是您失去了中等信任遵从性。您不能运行类似click-once、ASP.NET网站和Silverlight等机制。坚持引用和完全管理的概念,以确保代码可以在更多的地方运行。