C(++) 指针,需要澄清

C(++) Pointers, needing clarification

本文关键字:指针      更新时间:2023-10-16

可能的重复项:
理解指针的障碍是什么,可以做些什么来克服它们?

这可能是我在这里要问的最愚蠢的问题,但是一年来关于这个想法何时出现在我脑海中的随机谷歌搜索让我无处可去。

有人愿意向我解释在 C(++) 中指针的使用、为什么它们有用以及指针的实际应用吗?

我已经知道的:

  1. &指针在变量名称前面时,会更改引用以引用变量在内存中的地址。
  2. 指针可节省堆栈上的空间。
  3. 没有指针是可能的,尽管像标准库这样的库需要它们的基本知识,这严重限制了如果你选择不学习它们,你可以做什么。

对于那些试图解释的人 - 如果它有帮助的话 - 我有5年的Java业余经验,在实践中 - 不像C那样处理指针(但是,Java确实使用指针 - 参见NullPointerException来证明这一点)。

提前感谢!

Java中的每个对象"引用"实际上都是一个指针。当您将对象作为参数传递给 Java 中的方法时,您实际上是在传递指向该对象的指针;实际对象不会被复制或任何东西。调用方和被调用方都可以引用同一对象。这对你来说可能是很自然的。

相反,在C++中,默认情况下,如果将对象传递给方法,则会复制该对象。如果更改方法中的对象,则调用方中的原始对象保持不变。这对你来说应该很奇怪

但是,如果在C++中使用指针,则C++对象的行为类似于 Java 对象。对象保留其标识,而不是不断复制和销毁。呼!

C++中的引用是一种伪装的指针;如果通过引用将对象传递给方法,则调用方和被调用方都引用同一对象,但不能在不损坏原始对象的情况下使被调用方中的变量引用不同的对象。

你的问题没有简单的答案。你只需要研究一段时间。

但让我这样说:在机器层面,微处理器与存储器和寄存器一起工作。指针只是一项功能,也允许您直接使用内存。无论如何,这就是计算机所做的。这可以通过多种方式使代码更灵活、更高效或更易于实现。

对于使用它们多年的人来说,它们似乎是世界上最自然的事情。对于像 C# 这样的语言,即使语言控制了它们,它们仍然存在。

指针

不会节省堆栈上的空间,因为这是它们的主要功能。

指针是将地址存储在某些数据段的内存中的变量。此地址存储在变量中,就像您可以使用变量i将某些数据片段的索引存储在数组中一样。i不是数据,但它告诉您在数组中的位置可以找到它。指针不是数据,但它告诉您可以在内存中找到它的位置。