ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[http://www.cnblogs.com/snandy/archive/2011/03/01/1967806.html](http://www.cnblogs.com/snandy/archive/2011/03/01/1967806.html) [http://www.cnblogs.com/snandy/archive/2011/03/01/1968195.html](http://www.cnblogs.com/snandy/archive/2011/03/01/1968195.html) [http://www.cnblogs.com/snandy/archive/2011/03/01/1967962.html](http://www.cnblogs.com/snandy/archive/2011/03/01/1967962.html) 变量是计算机对内存单元的抽象,他是编程语言最重要的概念。 一般我们队内存单元的访问限制是通过变量的六个属性完成的 变量有6个属性(或者说从6个方面去描述变量) 名字/别名,代表的是对内存单元的标识符,表示内存单元 地址/左值 值/右值 类型 作用域 生存期/生命期 1、名字/别名 名字就是内存单元的标识符 当多个名字访问的都是同一个存储地址时(或者说多个名字都 绑定/约束 于同一个存储地址),可称这些名字为 别名。使用别名有损于程序的可读性,然而却很难从一门语言中完全消除。如下 ~~~ //java public static void main(String[] args) { String name = "Jack Ma"; String alias = name; name = "XXX"; System.out.println(name); System.out.println(alias); } //C int main(int argc,char **argv) { char argch[]="I Love You"; char *pc=&argch; char *pch=pc; printf("%s\t%s\n",pc,pch); *(pch+2)='A'; printf("%s\t%s\n",pc,pch); } ~~~ 可以看到两个指针指向同一块内存地址,通过指针更改一个字符,另外一个指针是不知情的。 ![结果详情](https://box.kancloud.cn/2016-02-24_56cd211da46f6.jpg "") 2、地址/左值 计算机中所有的数据都是存放在存储器中的,一般把存储器中的一个字节称为一个存储单元。为了正确的访问这些存储单元,需要为每个存储单元编个号。根据编号即可准确的找到该内存单元。内存单元的编号就称为 地址 。 在许多语言中,程序中同一个 名字/标识符 可以在不同的时间,与不同的 地址 关联/绑定 。 变量的地址有时也称为变量的左值(left value),或许是因为各种语言中变量经常位于赋值语句的左边表示地址。 又或许在地址图上编号总是位于左边,值总是在右边 ![或者这样](https://box.kancloud.cn/2016-02-24_56cd211db622e.jpg "") 3 值/右值 变量的值是指与这个变量相关联的存储单元的内容。可以将计算机的存储单元想象成抽象的单元,而非物理单元。 现代计算机多数以字节为单位,一个字节有八位长度。 变量的值有时也称为变量的右值(right value),因为变量常被用于赋值语句的右边(参考左值)。 4 类型 类型 决定了变量可以存储的值的范围,且定义了该类型的操作集合。 如Java中int类型占4个字节,取值范围是-2147483648~2147483647,对其可进行加减乘除及取模运算。 5 作用域 作用域是指变量的可见性问题。即决定了那些子过程和函数过程可访问该变量。 各种语言的划分也不同,如有的变量作用域分为:局部、窗体、块和全局。有的则只有局部、全局之分。 如C、C++、Java中有块级作用域,JavaScript中则没有 。 6 生存期/生命期 生存期/生命期 指的是何时创建,何时释放。生存期/生命期 与 存储绑定 密切相关。 如在Java中的一个方法中声明的一个变量,该变量在方法执行时创建,执行后释放。 ~~~ int main(int argc,char **argv) { char argch[]="I Love You"; char *pc=&argch; char *pch=pc; printf("%s\t%s\n",pc,pch); *(pch+2)='A'; printf("%s\t%s\n",pc,pch); } ~~~ 如在C中的main方法中声明的一个变量,argch[],pc,pch变量在方法执行时创建,方法执行完后释放。