变量是符合算法目的的逻辑结构,而内存位置是描述计算机操作的物理结构。一般而言,为了执行程序,在变量的逻辑概念与计算机的存储之间存在(编译器生成的)映射。
(即使在汇编语言中,我们也有(逻辑)变量用于算法和意图以及(物理)内存位置的概念,尽管它们在汇编中更为混杂。)
变量是一个高级概念。变量代表未知数(如在数学或编程分配中)或可以用值替代的占位符(如在编程中:参数)。
内存位置是一个低级概念。内存位置可用于存储值,有时可用于存储变量的值。但是,CPU寄存器是另一种存储某些变量值的方法。CPU寄存器也是较低级别的存储位置,但是它们不是内存位置,因为它们没有地址,只有名称。
从某种意义上说,变量是表示程序意图的抽象机制,而内存位置是提供存储和检索的处理环境的物理实体。
问题003:指针存储在存储单元0x23452中是否正确?为什么?
我们不能肯定地说。仅仅因为那里有一个可以用作地址的值,并不意味着它就是那个地址,它可以是整数(十进制)144466。我们不能仅仅根据数值的显示方式对数值的解释做出假设。
问004:是否在存储单元0x23452中存储了一个指针?为什么?
这确实是一个奇怪的问题。他们期望基于盒子的一些假设,但是,请注意,每个盒子的地址增加1。在任何现代计算机中,这意味着每个盒子都可以容纳一个字节-字节寻址能力已成为数十年来的标准。但是,一个字节只有8位,范围为0到255(对于无符号值);但是它们显示出存储在这些地址之一中的更大的值,因此非常可疑。(如果这是一个用词寻址的机器,这可能会起作用,但是并没有这么说,而且今天的机器很少,尽管有些教育机器也是如此。)
根据我向大家展示的四个抽认卡,我将以略有不同的方式定义指针:
指针是一个存储位置,其值是另一个存储位置的存储地址。
尽管在某些情况下这种想法是正确的,但您在这里混用了一些隐喻。变量的概念取决于算法及其意图—无需假设所有变量都具有存储位置。某些变量(尤其是数组)具有内存位置,因为内存位置支持寻址(而CPU寄存器只能命名为未索引)。
为了执行,变量和语句与处理器内存位置和处理器指令序列之间存在逻辑映射。其值从不改变的变量(例如常量)甚至不需要存储位置,因为可以随意复制该值(例如,根据编译器生成的代码序列的需要)。
a
,0x23453
。nil
等。里面的东西就是价值。对于您来说,这似乎很明显,但是如果不了解这些字段的定义方式,我就不愿意为这些问题提供决定性的答案。确实没有办法知道a
第二张图片中是字符,字符串(如果它们有所不同)还是变量名。如果是字符串,那么nil
字符串也是吗?还是“空”值?