C语言 何时使用指针的高级规划



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

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

谢谢。

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

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

按引用/C++值传递

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

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

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

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

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

还有很多其他地方:

  • 任何时候你做动态内存分配(malloc()和朋友)
  • 如果需要从函数返回多个"事物",则可以传递指向该对象的存储的指针,并让该函数填充该内存
  • 您可能需要使用函数指针
  • 可能还有很多其他的例子。

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

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

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

任何你不是100%确定的地方,如果你应该使用一个正态变量,使用指针。

最新更新