变量的定义是什么

时间:2018-10-25 14:34:10

标签: c language-lawyer

在测试中有人问我这个问题

  

给出变量的定义

我回答:

  

内存中的命名位置。

老师将我的答案标记为错误,并说我需要补充一点,变量可以更改。

我认为老师在这里是不正确的,因为“常量”是无法更改的变量的示例,并且该问题仅要求提供术语的一般定义。

真正的定义是什么?

4 个答案:

答案 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中的内存空间。