0

所以指针是很多人(包括我自己)有点困惑的东西。我了解它们是如何工作的,但是当我制作应用程序或其他什么时......我怎么知道什么时候最好使用它们?

是否有一个一般规则/指南,说明何时使用它们实际上是一个好主意。我觉得我在很大程度上理解了他们的概念,但总是想知道我是否应该在这里或那里使用指针等等......

谢谢你。

4

3 回答 3

2

它们是 C 语言的基本部分。在不粗鲁的情况下,我认为要考虑的关键是它们不是应该避免的。它们是您可以使用的另一种工具,并且是一种强大的工具。

通常,当您想要访问大量数据时使用它们(即:数组、海量结构、动态内存分配等)。它们在设计 API(应用程序编程接口)时也非常有用。这不应该是真正的 C# 问题,因为在 C# 和 C++ 中,您可以按值或按引用传递,并且问题的性质会根据按值或引用传递的有用性以及其他方式的用户而改变访问函数、类等外部的数据。

在 C++ 中通过引用/值传递

如果您只能按值传递,并且该值是只读的,那么没有指针就可以了,因为您无法更改该值。一个常见的情况是一个简单的 sum 函数:

int sum (int a, int b) {
   int value = a + b;
   return value;
}

您无需修改​​所提供的值,您只需访问简单的值,而不是数组或复杂的结构。

现在,如果你正在修改一个大数组的内容,特别是如果数组的大小可以在运行时改变(即:链表和其他数据结构),你需要指针,句点。如果要修改多个值,可以使用指针,也可以只使用函数的返回值(即:)int mysum = sum(1,2);。在常规工作中使用指针时,我遇到的唯一问题是确保在每个函数的开头检查任何可能的 NULL 指针值。真正的问题是在处理大型项目时,您可以从编写不佳的第三方 API 或库中获得非 NULL、无效/损坏的指针。这就是真正有趣的开始,使用 JTAG 调试器、GDB 等进行调试。

于 2013-10-21T17:58:14.090 回答
0

对于,我认为您最终会自然而然地将指针用于除最琐碎的琐碎程序之外的任何程序。当您想要引用任何非基本类型时,您将需要一个指针,例如结构、数组(包括字符串)。

还有很多其他地方:

  • 任何时候进行动态内存分配(malloc() 和朋友)
  • 如果您需要从函数返回多个“事物”,您可以将指针传递给该对象的存储空间并让函数填充该内存
  • 您可能需要使用函数指针
  • 可能还有很多其他的例子。
于 2013-10-21T18:01:46.247 回答
0

好吧,在动态内存分配的情况下,你会想要使用指针。

如果您不确定arrays要使用的大小,最好实现一个链表。

想要一个函数的多个返回值,最好传递要修改的变量的地址。

任何你不能 100% 确定的地方,如果你应该使用普通变量,请使用 Pointer。

于 2013-10-21T18:01:50.057 回答