为什么指针中的内存地址很重要

时间:2013-10-19 06:01:02

标签: c++ pointers

我个人认为我已牢牢掌握指针,但让我们说

int* pMyPointer;
int number = 1000;
pMyPointer = &number;
cout << pMyPointer << endl;

pMyPointer可能会返回0037FBB0的内存地址,但为什么这么重要?在编程时这怎么有用?

3 个答案:

答案 0 :(得分:3)

对象标识

如果你有两个指针或参考,你怎么知道使用一个可能影响另一个?只需打印所有数据成员的当前值,就不会告诉您它们是相同的对象还是克隆/副本。

因此,当您进行调试时,您会对存储在不同指针中的地址是否相同非常感兴趣,这需要您检查这些地址值。

答案 1 :(得分:0)

这是静态内存管理中非常重要的信息。 在用户空间应用程序开发中,此信息可能与大多数开发人员无关,但对于低级开发人员而言,它们非常重要。请记住,使用静态内存管理器编程语言总是是低级语言。

这也是指针如何工作的要点。它们将内存地址存储到它们指向的位置。 您还可以创建如下指针:int *mptr = (int*)0x13371234;。这会创建一个指针,指向int处的0x13371234

它还为您提供有关存储内容的信息,如果由于任何原因不允许内联汇编,也可以使用它来确定堆栈的位置。如果您使用malloc,那么它通常不是必需的信息。

答案 2 :(得分:0)

典型的用途是创建链接数据结构,如列表和树。

例如,在二叉树中,每个节点都包含指向其两个子节点的指针。

enter image description here

就指针而言,实际值很少本身意味着很多。它通常用作“神奇的cookie” - 一个本质上“神奇”的值可以让你访问某个特定的变量。在典型的情况下,您将地址保存到指针中,然后取消引用指针以获取该地址处的项目,而无需检查(甚至关心)指针本身的值。

但这个一般规则有一些例外。例如,一些存储器分配器使用块的地址不仅跟踪块的位置,而且还跟踪块的大小。通过以与大边界对齐的块开始,并且总是以2的幂分割块,整个地址告诉块的位置,并且地址的低位表示必须已经分配的块的大小。到那个地址。

后者绝对是例外。 典型的情况是指针的值除了允许访问该地址的项目之外没有任何意义。