【发布时间】:2020-11-03 09:47:54
【问题描述】:
我试图围绕变量的概念展开思考。
很明显,变量的工作原理是隐含的。然而,我试图解释我的隐性知识并遇到了一些困难。这是我想出的:
变量是一个特定大小的容器。 大小取决于变量声明中的数据类型和硬件(具体是什么?字长?)。 变量在内存中的地址存储在该容器的预分配大小内(变量的名称如何连接到它的内存地址?)。 在内存中为该变量保留的位置内,可以存储与声明的数据类型相对应的值。
这有什么问题或不准确(我敢肯定)?怎么解释比较好?
【问题讨论】:
-
变量也有对齐方式。如果它们存储在内存中,它们将有一个地址,但并非所有变量都存储在内存中(有些存储在寄存器中)。例如,使用
register存储类声明的变量可能没有内存地址。类似地,即使没有register说明符,优化函数中的变量也可以分配给寄存器。 -
大小取决于编译器实现(不是硬件)。大多数实现都遵循硬件的“自然大小”。不难想象一个编译器使用不同的
int大小和选项--intsize=16或--intsize=48... -
我会说变量是一个完全由标识符表示的对象,尽管这种描述也适用于函数的形式参数。
-
@IanAbbott:这很好,在 C 中,参数是变量:您可以读取和写入它们,并将它们的地址当作“普通”变量,例如在函数内部定义的变量。它们只是使用调用者参数的值初始化的自动对象。
-
@EricPostpischil 我想这是正确的,并且很有用。我在想 C 标准可能会以某种方式区分参数和变量,但它没有在任何地方定义术语“变量”。