【问题标题】:C++ Pointers usage [closed]C++ 指针用法 [关闭]
【发布时间】:2012-07-21 08:11:53
【问题描述】:

最近,我一直在涉足 C++ 中的指针。根据我的阅读,指针变量用于通过引用(类似于VB中的ByRef)或函数指针(C#中的委托)传递变量。我很确定指针的使用不仅限于这些示例。我希望知道一些需要指针的应用程序。网络上的大多数教程都试图解释通过引用传递的用法。 在此先感谢,并对这个愚蠢的问题表示抱歉:)

【问题讨论】:

  • 传递变量有两种方式:值传递和引用传递。指针传递实际上是值传递,而不是引用传递。这可能会帮助你stackoverflow.com/questions/4426474/…
  • 只要标记为 C 和 C++,您可能会看到不同的答案。
  • 动态数组在 C 和 C++ 中具有相同的有效性,并且非常适合指针使用。在后者中,您最好使用像 std::vector 这样为您实现数组的东西,但指针仍然存在于向量中。
  • 正如之前的回答所说,函数指针非常适合回调,但同样,最新版本的 C++ 将其封装在一个不错的 std::function 中,语法更少混乱,灵活性更高。

标签: c++ pointers


【解决方案1】:

您可能需要使用指针的原因有很多。之一 最明显的是一个可选参数:

void f(int a, int const* b = NULL);

使用f,可以测试b是否为空,并作用于 结果。

使用指针的另一个非常常见的原因是导航。你 例如,可能想查看观察者模式。但这有 许多其他需要在对象之间导航的情况(使用 动态变化的关系)。

最后,在动态分配对象时使用指针。这 在 C++ 中并不像在 C# 或 Java(其中 基本上分配一切,或几乎一切动态)。在 C++,动态分配东西的通常原因是 对象不可复制(它有身份)并且有一个生命周期 独立于程序范围。另一个原因是子对象在 具有动态拓扑的对象:图等的节点,对于 例子。多态性有时也是一个原因;如果实际类型 一个对象取决于一些运行时条件,你必须分配它 动态的。

【讨论】:

    【解决方案2】:

    请注意,如果您使用 C++ 编程,则应该从智能指针开始学习:

    http://en.wikipedia.org/wiki/Smart_pointer

    智能指针等同于指针,但更安全。

    这里有一个很好的使用 c++ 智能指针的教程和练习:

    http://www.ida.liu.se/~TDDD38/exercises/Smart_Pointer_II/Smart_pointer_II-11-en.pdf

    【讨论】:

    • 在您了解普通指针之前,您不应该使用智能指针。智能指针适用于特殊情况,但普通指针仍然是最通用的。 (在这种情况下,OP 是在谈论获取变量的地址。智能指针对此不起作用。)
    【解决方案3】:

    通常,只有在没有其他选择时才能使用指针。例如,在 C 中,无法将变量“通过引用”传递给函数。

    在没有指针的 C++ 中,你也无法真正实现运行时多态性。

    【讨论】:

    • 你的意思是我可以使用基类指针指向派生类对象??
    • 这就是你调用虚函数的方式
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2012-09-26
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多