【发布时间】:2013-06-21 06:42:33
【问题描述】:
这将是一个非常重要的问题,但自从我开始学习指针以来,我一直很好奇程序运行时幕后会发生什么。
据我所知,计算机内存通常被认为是一条长长的内存条,平均分为单个字节。当然,像下面这样的图片唤起了这样一个比喻:
我一直想知道的一件事是,内存地址本身代表什么?我确信内存地址显示为 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 个字节中的位置?
【问题讨论】:
标签: variables pointers memory-address