什么时候使用指针的高级计划?

时间:2013-10-21 17:50:48

标签: c pointers

所以指针很多人(包括我自己)都会对此感到困惑。我理解它们是如何工作的,但是当我提出申请或其他什么时......我怎么知道什么时候最好使用它们?

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

谢谢。

3 个答案:

答案 0 :(得分:2)

它们是C语言的基本部分。没有粗鲁,我认为要考虑的关键是它们不是要避免的。它们是您可以使用的另一种工具,也是一种强大的工具。

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

Pass by Reference / Value in C++

如果你只能传递值,并且值是只读的,那么没有指针就可以了,因为你无法更改值。一个常见的例子是一个简单的求和函数:

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

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

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

答案 1 :(得分:0)

对于,我认为你自然会最终使用指针来解决除了最微不足道的琐碎程序。当您想要引用任何非基本类型时,您将需要一个指针,例如结构,数组(包括字符串)。

其他很多地方:

  • 任何时候进行动态内存分配(malloc()和朋友)
  • 如果你需要从函数返回多个“东西”,你可以将指针传递给该对象的存储并让函数填充该内存
  • 您可能需要使用函数指针
  • 也可能有很多其他例子。

答案 2 :(得分:0)

好吧,在动态内存分配的情况下,你会想要使用指针,这样就可以使用几个简单的位。

如果您不确定要使用的arrays的大小,请更好地实施链接列表。

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

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