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

时间:2011-05-12 02:35:03

标签: c++ c pointers

  

可能重复:
  What are the barriers to understanding pointers and what can be done to overcome them?

这可能是我在这里要问的最愚蠢的问题,但是当我想到这个想法时,一年的随机谷歌搜索让我无处可去。

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

我已经知道的事情:

  1. &指针在变量名前面,更改引用以引用内存中变量的地址。
  2. 指针可以节省堆栈空间。
  3. 虽然标准库之类的库需要基本的知识,但是如果您选择不学习它们,那么它可以在没有指针的情况下顺利通过,这会严重限制您的行为。
  4. 对于那些试图解释的人 - 如果它有帮助 - 我有5年的Java业余经验,在实践中 - 不像C一样处理指针(但是,Java确实利用了指针 - - 请参阅NullPointerException以证明这一点。

    提前致谢!

3 个答案:

答案 0 :(得分:3)

Java中的每个对象“引用”实际上都是一个指针。将对象作为参数传递给Java中的方法时,您实际上是将指针传递给对象;实际的对象没有被复制或任何东西。调用者和被调用者都可以引用同一个对象。这对你来说似乎很自然。

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

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

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

答案 1 :(得分:0)

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

但是让我这样说:在机器级别,微处理器使用内存和寄存器。指针只是一种功能,允许您直接使用内存。无论如何,这都是计算机所做的。有很多方法可以使代码更灵活,更高效或更容易实现。

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

答案 2 :(得分:0)

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

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