首页 >
变量 (程序设计)
✍ dations ◷ 2025-05-17 12:13:33 #变量 (程序设计)
在程序设计中,变量(英语:Variable,scalar)是指一个包含部分已知或未知数值或信息(即一个值)之存储地址,以及相对应之符号名称(识别字)。通常使用变量名称引用存储值;将名称和内容分开能让被使用的名称独立于所表示的精确消息之外。电脑源代码中的识别字能在运行期间绑扎一个值,且该变量的值可能在程序运行期间改变。
程序设计中的变量不一定能直接对应到数学中所谓的变量之概念。在程序设计中,变量的值不一定要为方程或数学公式之一部分。程序设计中的变量可使用在一段可重复的程序:在一处赋值,然后使用于另一处,接着在一次赋值,且以相同方式再使用一次(见迭代)。程序设计中的变量通常会给定一个较长的名称,以描述其用途;数学中的变量通常较为简洁,只给定一、两个字母,以方便抄写及操作。一个变量的存储地址可以被不同的识别字所引用,这种情况称之为别名。使用其中一个识别字为变量赋值,将会改变透过另一个识别字访问的值。编译器必须将代表变量的名称替代成该数据所在的实际地址。变量的名称、类型及地址通常会维持固定,但该地址所存储之数据于程序运行期间则可能会改变。用标识符引用变量能对变量进行访问,从而读出变量的值,改变变量的值,或者改变变量的属性(如访问权限、状态锁定等)。例如,一个变量用标识符total_count来引用,设定这个变量的值为1981。如果该变量同时也用标识符x 来引用,通过x将变量值改变为2010,那么读取total_count的值就是2010而不是1981。如果某种编程语言只允许同一个变量用一个标识符引用,那么讨论“该变量的名字”就是有意义的,否则我们称之为“该变量的名字之一”。例如,在前面的那个例子当中,total_count是这个变量的名字之一,而x是这个变量的另外一个名字。在指令式编程语言中,变量的值通常能够随时访问或重新赋值。但在逻辑编程语言中,根据参数透明的需求,变量被绑定到表达式并且在它的整个生命周期中保持同一个值。在指令式编程语言中,同样的行为用常量来表达,它和通常的变量存在反差。根据编程语言的类型系统的不同,变量可能只存储一种特定的数据类型(如整型或字符串型)。而另外一种情况,变量的数据类型能根据当前赋值而改变,允许单个变量存储该编程语言支持的任何数据类型。与数学当中的量不同,程序设计所用的变量和常量通常都采用多字符的名字,如count或者size。而单个字符的名字一般仅用于辅助性的变量,如i,j,k常作为数组索引的变量。一些命名规范是作为语法在语言层面强制执行的。在大多数语言当中,变量名不能以数字开头,不能包含空格符。而标点符号是否允许存在在变量名当中就要视具体语言而定了。很多语言仅仅允许下划线_存在在变量名当中,而禁止其他所有的标点符号;而有些编程语言,特殊字符作为前缀或后缀添加在变量标识符当中来表明变量的类型。变量名的大小写敏感性也要视具体语言而定。大多数现代语言是大小写敏感的,一些较老的语言则不敏感。一些语言保留特定形式的变量名用来内部使用,在很多语言中,以两根下划线开头__的变量名常充当这种角色。在语言语法基本的限制以外,进一步的命名风格规范也很有必要。在机器码层面,是不会使用变量名的,所以计算机并不关心是否采用了准确的名字。正因为如此,变量名完全是作为程序员的工具而存在,借助这个工具程序员能更容易的编写和理解程序。程序员通常创建编码规范,并且坚持这些规范,帮助对变量命名甚至提供精确的命名规划。较短的名字便于输入,但是描述能力较差;较长的名字使程序更容易读懂,变量的意图更容易理解。尽管如此,冗长的变量名也可能会导致更难理解的代码。在源代码中,变量名是将变量和内存地址绑定的一种方式。变量值以数据对象的形式存储在相应的地址内,这样该数据对象就能通过变量的名字进行访问和修改了。在电子表格中,一个单元格可能包含参考其他单元格的公式。这种被参考的单元格就是一种形式的变量,它的值就是被参考的单元格的值。变量的作用域表示变量在原程序的文本中能被使用的范围。变量的生存周期表示变量在程序运行过程中具有实际意义的值的时间范围。变量的作用域事实上是变量名字的性质,而变量的生存周期是变量本身是性质。变量名字的作用域会影响它的生存周期。作用域是变量语法方面的性质。多数语言对每一个变量(和其他名目实体)定义明确的作用域,这些作用域在同一个程序中可能不同。变量的作用域是指程序中的特定区域,在这些区域中,该变量的名字是有意义的并且变量是“可见的”。在进入作用域时,变量通常开始它的生命周期;而在离开作用域时,变量往往结束了它的生命周期。例如,某个变量的语法作用域仅在特定的语句块或者子程序中。只有在某个函数中能访问的变量则被称为局部变量,在程序的任何一个地方都能引用的变量被称为全局变量。生存周期,则是变量在运行时的性质。在运行时,每次变量与值的绑定都具有自己的生存周期。绑定的生存周期是程序执行过程中的一段时间,在这段时间内,变量始终被关联到相同的值或者内存位置。在闭包的情况中,运行中的程序可能进入和离开某个生存周期很多次。在一些代码段中,在一个变量的作用域中可能未被赋值,或者它的值已经被销毁掉了。这类变量常被称为“生存周期外”或者“未绑定”。在很多语言中,试图使用未绑定的变量是一个错误。在其他语言中,这种行为会产生不可预期的结果,这样的变量可能被分配一个新的值。与之对照的是,一个变量绑定到一个超过他作用域的生存周期是被允许的,如Lisp的闭包和C语言的静态局部变量。当程序再次执行到变量的作用域时,变量能再次被使用,但还保持上一次的值。为了提高空间效率,变量需要的存储空间可能要等到变量第一次使用时才申请,不再使用后就删除。为了避免浪费空间,如果变量声明了但不实际使用,编译器通常会向程序员发出警告。使变量的作用域尽可能的小,被认为是一个好的编程方式,这样程序的不同部分就不会因为意外的改变对方的变量而互相影响了。实现上述目标的通常技术是让程序的不同部分使用不同名字空间,或者通过动态变量作用使用各自的私有变量。很多程序设计语言使用保留的值(如NULL)表示没有初始化的变量。在静态类型语言中,如Java或ML,每个都变量有一个类型,也就是说只有给定种类的值能存储到该变量中。一个基本类型的变量只能保存基本类型的值。一个类类型的变量能保存空值NULL,或者保存该类型或其子类型的对象。一个接口类型的变量能保存空值NULL,或者该接口的任何一个实现。一个数组类型能保存空值NULL或者一个数组。在动态类型语言中,如Python,是值,而不是变量来携带类型信息。在Common Lisp中,这两种情况同时存在:变量在编译时具有一个类型(如果没有声明,就假设这个类型为超类型T);值也有具有一个类型,该类型可以在运行时进行检查和识别。变量的类型也允许在编译时多态决定。但是,这和面向对象的函数调用(在C++中称为虚函数)的多态不同。变量常常保存简单的数据,如整数和字符串。但有些程序设计语言允许变量同时表示多种数据类型。这些语言一般也允许函数参数多态,其函数对变量的操作可同时适用于多种数据类型。例如,函数length可以求一个列表的长度,如果length的类型签名中包含一个类型变量,就可以实现参数多态。这样,求列表中的元素个数就与列表元素的类型无关了。函数的形式参数也被称为变量。如下的C++代码段:变量x是“形参”,因为当函数被调用时会被给定一个值。整数5是“实参”,它给x一个值。在多数语言中,函数参数具有局部的作用域。这里的变量x只能在AddTwo函数中有效(尽管如此,其他函数也可以使用自己的变量x)。变量的内存空间分配和它们值的表示方法是多种多样的,这种区别体现在语言之间,也体现在给定语言的内部使用上。很多语言都实现了局部变量的空间分配方式。局部变量保存在调用堆栈上,其生存周期维持在单个函数中,函数返回时这些内存会自动被回收。(更一般的讲,变量的名字是和一些特定的连续内存块的地址绑定,对变量的操作其实是对相应的内存块进行操作。)对于巨大或者编译时不知道大小的数据,更常用的方法是使用“引用”。 这时记录是值的地址而不是值本身,它们是从一种被称为栈的内存池中分配的。绑定的变量具有值,一个抽象的值。在程序执行时,变量的值用计算机内存中存储的一些数据对象来表示。程序,或者说运行时环境,必须为每个数据对象设置内存。由于内存是有限的,为了安置每一个数据对象,当数据对象不再表示某个变量的值时,相应的内存会被回收并重新使用。在堆中分配的对象必须被释放掉,特别是当对象不再被需要时。在具有垃圾回收机制的语言(如C#、Java和Lisp)中,当变量出了其作用域再也不能被引用时运行环境会自动地回收对象。在不具有垃圾回收机制的语言当中,如C语言,程序(程序员)必须显式地分配内存,而且用完之后还要释放内存。如果没有这样做会造成内存泄漏,在这种情况下,程序运行过程中堆会逐渐消耗,最终因为内存耗尽而崩溃。当一个变量指向动态创建的数据结构时,可能其中一些部分只能通过变量间接的访问。在这种环境下,垃圾回收器(或者类似的语言特性)必须处理当变量回收时只有一部分内存能够获得的情况。
相关
- 乳癌乳腺癌是由乳房组织发展成的癌症。乳腺癌的征象包括乳房肿块、乳房形状改变、皮肤凹陷、乳头分泌物或是皮肤出现红色鳞屑状斑块。而出现远端转移的病患,可能会有骨痛(英语:Bone
- 假性怀孕假性怀孕是一种临床或是亚临床的症状,指生物在临床上出现一些怀孕的迹象(例如闭经、孕吐、乳房胀痛,甚至是腹胀,但事实上并非真正怀孕。临床上,人类以外的动物常出现假性怀孕(特别
- 永续发展目标可持续发展目标(英语:Sustainable Development Goals,简称SDGs)是联合国的一系列目标,这些目标于2015年底替换千年发展目标。这些目标将从2016年一直持续到2030年。这一系列目标
- 国家列表以下是位于北美洲的国家及海外领土列表,当中包括名称、国旗、首都、货币、官方语言、面积 、人口、国内生产总值(GDP)、人均国内生产总值(PPP)以及地图 。(属地以浅蓝色背景显示)北
- 胱胺酸症胱氨酸症(英语:Cystinosis)是溶小体贮积症的一种,因第17对染色体短臂13位置的CTNS基因发生缺损,导致将胱氨酸携出溶小体的运输酶功能异常,胱氨酸堆积溶小体上,进而造成器官的病变。
- 1111号染色体是人类23对染色体中的一对,正常人拥有2条11号染色体。11号染色体缠绕了约1.345亿碱基对(构筑DNA的材料),并包含了人类细胞中4~4.5%的DNA。这是人类基因组中包含最多控
- 列当See text.列当属(学名:Orobanche)是列当科草本的寄生植物,约有200多种,主要分布于北半球温带地区。属于小型植株,约10厘米至60厘米高。完全不具叶绿素,而呈白色至深褐色,花为白色或
- 在线百科全书网络百科全书,是在互联网上公开给网民查阅的百科全书,网络百科有开放和非开放两种。在线百科全书,也称为数字百科全书,是可通过互联网访问的百科全书。使用互联网创建免费百科全
- 玛纳斯Template:中华民国非物质文化遗产《玛纳斯》(柯尔克孜语:"Манас" дастаны)是柯尔克孜族的英雄史诗,为全世界第二长的史诗,仅次于藏族史诗《格萨尔王传》,长度超过印度
- 归正宗归正宗(英语:Reformed church)也称加尔文宗、更正宗、改革宗,是基督新教的宗派之一。狭义的归正宗(Continental Reformed church)即欧洲的加尔文主义教会,广义的归正宗(Reformed chu