好吧,在我得到任何机会忽略和跳过指针之后(当我第一次开始学习C ++时,它们看起来非常复杂>。<),我终于决定了解它们是什么以及如何使用它们。
所以现在我知道如何使用指针,我唯一无法解决的问题就是你想要使用它们的原因。我现在已经在互联网上搜索了近7个小时,我仍然找不到合适的解释。
那么,有人可以向我解释使用指针的重点是什么? (给我一个例子,如果可以,最好是一个函数的例子,它做了一些相对有用的东西,所以我能理解)。
答案 0 :(得分:3)
一些选择例子,有很多甚至更多:
new
,delete
,动态大小的数组)答案 1 :(得分:2)
指针只是一个存储内存位置数字索引的数字。每种语言中的每个非平凡程序都需要这些数字来跟踪有趣的函数和数据的位置。在某些语言中,指针的使用是隐藏的 - 你只是看到一些像“employee_name”这样的标识符,并且内部编译器或解释器已经安排存储并将指针传递到周围,因为它需要使程序按照语言的规定运行,但他们总是在下面。
如果你看不到指针的使用,你不能总是推断语言中的哪些操作是便宜的,哪些会产生成本。
在像VB这样的一些愚蠢的语言中,它曾经是更高级的数据类型,如关联容器(std::map
,std::unordered_map
),链表,图表等等。必须使用笨拙的函数,内部使用C或C ++来跟踪数据元素之间的关系。直接在C ++中工作,您可以自己创建这样的数据类型,以便根据您的精确行为,性能和内存使用折衷来建模任意关系。
C ++公开指针,以便您可以明确控制现有对象使用的内存区域是否在程序的不同部分传递,可能会授予它们更改值的权限,甚至可以取消分配内存。这比其他语言(如Java,Ruby和C#)更有效,在不再需要数据的情况下,当复制可能发生时,哪些代码可以访问某些数据而不是该数据的副本。像垃圾收集这样的东西存在以试图跟踪数据的使用,但通常会引入性能问题,效率低下和不可预测的销毁时间 - 无论问题取决于应用程序。
答案 2 :(得分:0)
最基本的原因是堆栈和堆的有效使用。
Stack的大小非常有限,它是一个容纳变量的容器。
堆(或"免费存储")是用于动态分配的大型内存池。它的大小仅限于动态内存(RAM)中的可用空间。
如果您尝试将所有内容存储在堆栈中而没有动态分配和指针,您将进入堆栈溢出。
你也可以想象堆作为旅行和堆叠的国家是你的指南,你可以获得有关餐馆,酒店等位置的信息。