指针的两难境地:如果指针只存储内存地址,那么指针本身的内存地址又该如何存放?

编程语言 2026-07-11

如果一个指针存储内存地址,那么指针的内存地址是如何被存储的?然后指针的内存地址的内存地址又是如何被存储的?我想解释的是,难道你不会陷入一个持续的循环吗?

我画了一张我想要表达的问题的示意图

在此输入图片描述

解决方案

你似乎以为在运行时,每个变量的地址都必须显式地存放在某处内存中,因此每个变量在内存中都必须有自己的指针。你似乎还认为这些指针中的每一个本身也必须在内存中显式地存放一个地址,这将意味着程序要有一个变量就需要无穷的间接层级(因此需要无限量的内存)。

然而,事实并非如此。运行时并不需要把所有变量的地址显式地存放在内存中。相反,为了访问一个函数的所有局部变量,只需要在运行时存储该函数的栈帧的地址即可。

这个栈帧通常包含函数的所有局部变量,因此你不需要为每个变量设置一个独立的指针。你只需要一个指向函数栈帧的指针,就可以访问该函数的所有局部变量。

你不需要这个栈帧指针的地址。这个指针很可能甚至没有在内存中的地址,因为它很可能位于一个CPU寄存器中(例如在使用 x86-64 CPU 时在RBP寄存器中)。

编译器生成的代码很可能包含从栈帧起始位置开始的偏移量,用于指示代码想要访问的局部变量在栈帧中的位置。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章