这将是一个非常复杂的问题,但是自从我开始学习指针以来,我一直对程序运行时幕后发生的事情非常好奇。
据我所知,计算机内存通常被认为是一条长长的内存条,平均分为单个字节。当然,像下面这样的图片唤起了这样一个比喻:
我一直想知道的一件事是,内存地址本身代表什么?我确信内存地址显示为 8 位十六进制值(例如/00EB5748)并非巧合。为什么是这样?
此外,当我声明一个变量 x 时,内存级别发生了什么?编译器是否只是为数据存储保留一个随机地址(+变量类型需要多少个连续地址)?
现在假设 x 是一个无符号整数,占用 2 个字节的内存(即值范围从 0 到 65536)。当我声明 x = 12 时,发生了什么?我等于 12 是什么?当我绘制概念图时,我通常有一个地址框(比如 &x),指向一个看起来什么都不占的变量(x),我确信这不能完全准确地描述正在发生的事情。
二进制级别发生了什么?地址 00EB5748 是否被视为 111010110101011101001000 并在某处存储值 12 或 1100?
大多数情况下,我的困惑和好奇源于内存地址和声明的实际值之间的关系(例如/12、'a'、-355.2)。再举一个例子,假设我们的地址 00EB5748 指向一个字符 's',根据 ASCII 图表其值为 115。通过在内存中的该位置翻转适当的 1 和 0,地址是否描述了将值 115 存储在 1 个字节中的位置?