可能重复:
What are the barriers to understanding pointers and what can be done to overcome them?
这可能是我在这里要问的最愚蠢的问题,但是当我想到这个想法时,一年的随机谷歌搜索让我无处可去。
有人会在向我解释C(++)中指针的使用,为什么它们有用,以及指针的实际应用?
我已经知道的事情:
&
指针在变量名前面,更改引用以引用内存中变量的地址。对于那些试图解释的人 - 如果它有帮助 - 我有5年的Java业余经验,在实践中 - 不像C一样处理指针(但是,Java确实利用了指针 - - 请参阅NullPointerException以证明这一点。
提前致谢!
答案 0 :(得分:3)
Java中的每个对象“引用”实际上都是一个指针。将对象作为参数传递给Java中的方法时,您实际上是将指针传递给对象;实际的对象没有被复制或任何东西。调用者和被调用者都可以引用同一个对象。这对你来说似乎很自然。
相反,在C ++中,默认情况下,如果将对象传递给方法,则会复制该对象。如果更改方法中的对象,则调用方中的原始对象保持不变。这对您来说应该是奇怪的。
但是如果你在C ++中使用指针,那么C ++对象就像Java对象一样。对象保留其身份,而不是不断被复制和销毁。呼!
C ++中的引用是一种伪装的指针;如果通过引用将对象传递给方法,则调用者和被调用者都引用同一个对象,但是不能使被调用者中的变量引用不同的对象而不会损坏原始对象。
答案 1 :(得分:0)
你的问题没有简单的答案。你只需要研究它一段时间。
但是让我这样说:在机器级别,微处理器使用内存和寄存器。指针只是一种功能,允许您直接使用内存。无论如何,这都是计算机所做的。有很多方法可以使代码更灵活,更高效或更容易实现。
对于使用它们多年的人来说,它们似乎是世界上最自然的东西。对于像C#这样的语言,即使语言控制它们,它们仍然存在很多。
答案 2 :(得分:0)
指针不会在堆栈上节省空间,因为这是它们的主要功能。
指针是将地址存储在某些数据的内存中的变量。这个地址存储在一个变量中,就像你可以使用变量i
来存储数组中某些数据的索引一样。 i
不是数据,但它告诉您在数组中可以找到它的位置。指针不是数据,但它告诉你在内存中可以找到它的位置。