见标题。这就是我要问的全部内容。网络对这个问题没有很多简洁的答案。请记住堆栈与堆。像对待一个完整的初学者一样解释。只是寻找“为什么”而不是“如何”。
修改的 指针是否可以将大型对象从堆栈中取出?
答案 0 :(得分:3)
当将一个巨大的对象从一个程序传递给另一个程序时,就像整个类一样,或者像图像或视频这样的大量数据传递,每一位数据都会非常低效。相反,你可以传递一个小的内存地址(指针),程序的接收部分可以使用它来获取要处理的对象。
除了这个巨大的方面,它们提供了很大的灵活性,但我需要的不仅仅是段落。
当你进入像C#或Java这样的托管代码时一切都是通过指针/引用来完成的,但它都是幕后的,你不必像处理它们一样处理它们你会用C ++或其他类似的语言。但了解它们的工作方式仍然至关重要。
编辑以回复:
"如果我不需要继续工作,为什么我会传递一个大物体 它"
你不会。然而;纠正我,如果我偏离了你的要求,但是如果你继续进入计算机科学,你将学到的是你的程序中的一部分应该尽可能简单,它应该只做一件事。通常称为Single Responsibility Principle,这表明你将拥有许多看似很小的程序部分,这些部分将共同完成目标。这意味着很多这些微小的部分将需要处理相同的对象,相同的数据并使用相同的工具来完成工作。让我们看一个假设。
您正在编写一个简单的图像编辑应用程序。您需要一个裁剪工具,一个画笔工具,一个选择工具和一个重新调整大小的工具。这些工具中的每一个都需要在你的程序中拥有自己的位置(一个类或更多可能在一起工作的类),并且该类将有许多小块(方法/函数和其他东西)一起工作以实现目标那个班。这些类和方法中的每一个都很可能需要查看或修改图像数据。使用指针,您可以为它们提供内存地址,而不是制作图像的完整副本。这样,当其中一个类或方法对其进行更改时,您不必担心管理所有这些副本并确保它们都得到相同的更改。
答案 1 :(得分:3)
它允许您执行传递引用/共享数据结构,它具有两个重要特性:通过不进行复制来节省内存和CPU开销,并通过更改共享数据来提供复杂的通信模式。 / p>