在测试中有人问我这个问题
给出变量的定义
我回答:
内存中的命名位置。
老师将我的答案标记为错误,并说我需要补充一点,变量可以更改。
我认为老师在这里是不正确的,因为“常量”是无法更改的变量的示例,并且该问题仅要求提供术语的一般定义。
真正的定义是什么?
答案 0 :(得分:3)
C语言没有定义“变量”这样的概念,因此在C的上下文中,答案是它是未定义的,或者是由编写/讨论C并将其用于表示其特定含义的人定义的上下文。
在C语言中,最接近“变量”的是“对象”,它在3.5中定义:
1 对象
执行环境中的数据存储区域,其内容可以表示值2注释当被引用时,对象可能被解释为具有特定类型;例如:参见6.3.2.1。
在C语言中,某些对象是const
限定的,这可能会使它们在使用该语言的某些/许多人的眼中成为“变量”。另一方面,const
限定的对象不能充当可在常量表达式中使用的常量;相反,它们就像其他所有对象一样,除了任何尝试修改其值的尝试都会产生未定义的行为。
请注意,“变量”一词确实在标准中出现了很多次,主要是在“变量参数”(stdarg.h
)或“可变长度数组” /“可变修改类型”的上下文中出现的。但是,在许多示例和注释以及一些规范性文本中,也非正式地使用了它,可能是指对象,但从未定义过。
答案 1 :(得分:2)
此问题标记为C,但C标准未定义“变量”。就某种意义而言,2018年标准在非规范性注释,示例和脚注中使用了该词。在规范文本中使用它的几个地方是后来添加的补充语言功能(例如线程和原子对象),我不认为它们在这里的使用是关于含义的明确信息。
在标准中,通常通过“对象”(存储区域)和“标识符”(名称)描述变量的一般含义。在这方面,您的答案是正确的。
但是,我们不知道您课程的背景。它可能包括对“变量”一词的讨论,并且该讨论可能已将其定义为您的测试所需的老师。
从历史上看,变量表示可以更改其值的事物,因此它们被命名。后来,具有恒定对象的编程语言得到了发展,这在历史名称和当前用法之间引起了一些冲突。我希望这是C标准从“变量”转向“对象”和“标识符”的部分原因。仅坚持使用具有历史意义的术语是过分刻板的,除非它是本课程中提出的明确定义。
答案 2 :(得分:1)
ISO / IEC9899:2017(N2176)§6.7/ 5:
声明指定一组标识符的解释和属性。标识符的定义是对该标识符的声明,该声明:
—对于一个对象,将为该对象保留存储空间;
所以
给出变量的定义
answering
int foo;
足够了。
答案 3 :(得分:1)
从Wikipedia中了解有关变量及其定义的信息:
在计算机编程中,变量或标量是存储 位置(由内存地址标识)与一个 关联的符号名(标识符),其中包含一些已知或未知数量的信息,称为值。 变量名称是引用已存储内容的常用方法 值,除了引用变量本身之外,还取决于 上下文。
名称和内容的这种分隔允许使用名称 与其表示的确切信息无关。的 计算机源代码中的标识符可以在运行时期间绑定到值,并且变量的值可能因此改变 在程序执行过程中
例如在这里
int input = 10; /* definition of variable input */
在变量input
的初始化(赋值声明)中,{strong> 本身在某处为input
保留了一些内存在主内存 RAM 的堆栈部分中。还有这里
const int input = 10; /* definition of variable input */
input
是常量变量,即不能直接更改,但它仍然是变量,即可以包含某些内容,因此它占用了主内存RAM中的内存空间。