关于c ++:指针,需要澄清

C(++) Pointers, needing clarification

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What are the barriers to understanding pointers and what can be done to overcome them?

也许这是我在这里要问的最愚蠢的问题,但一年来,当这个想法出现在我的脑海中时,我却无处可逃地胡思乱想。

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

我已经知道的是:

百万千克1&指针在变量名前面时,将引用更改为引用变量在内存中的地址。百万千克1百万千克1指针节省堆栈上的空间。百万千克1百万千克1虽然标准库等库需要它们的基本知识,但没有指针是可以通过的,这严重限制了如果您选择不学习它们,您可以做什么。百万千克1

对于那些试图解释——如果它有帮助——我在Java中有5年的业余经验,在实践中,它不处理C方式的指针(但是,Java确实使用指针——参见Null PoExtExchange,以证明这一点)。

事先谢谢!


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

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

但是如果你在C++中使用指针,那么C++对象就像Java对象一样。对象保留其身份,而不是经常被复制和销毁。唷!

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


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

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


你的问题没有简单的答案。你只需要学习一会儿。

但我要说的是:在机器层面上,微处理器使用内存和寄存器。指针只是一个允许您直接使用内存的特性。不管怎样,这就是电脑所做的。这有许多方法可以使代码更加灵活、高效或更容易实现。

对于一个使用了多年的人来说,它们似乎是世界上最自然的东西。对于C这样的语言,即使语言控制它们,它们仍然非常存在。