很多书中喜欢将变量比喻成一个容器,比如盒子、碗之类的。但老金认为这个比喻有失妥当。按字面意思理解,变量只是一个可以改变的量,就像函数中的自变量x、因变量y一样。变量本身并不具有存储功能,有存储功能的是内存,所以老金认为把变量比喻成可以存储的容器有误导之嫌。
老金冥思苦想,想出一个自认为更合适的比喻。
可以把变量想象成一个要去存包的游客,而寄存柜就是内存。只要有空的柜子,谁都可以去寄存(这就是为什么叫变量)。类似地,只要内存有空间,哪个变量都可以用来存储数据。
比如老金(变量)去海边玩,需要寄存。老金首先要根据包的大小选择规格合适的柜子(定义变量的类型)。当完成寄存的一刹那,老金便和寄存柜的编号绑定了(在完成变量赋值的一刹那,变量也和变量地址绑定了),老金也就有了柜子的使用权(变量有了内存的使用权)。这个过程用代码表示就是:
int laojin=9527;
此时,老金这个存包人就是变量,“老金”这个名字自然就是变量名,老金存到柜子里的东西就是变量的值,而柜子的编号就是变量的地址,柜子的大小规格就相当于变量的类型。
老金可以随时改变柜子里存放在东西(改变变量的值),只要放得进去(赋值要符合变量的类型),老金随便往里面存什么都可以。
老金玩累了,要取包有两种方法,一种是根据老金的名字查到编号(哪怕是看一眼腕带上的编号),再根据编号找到柜子。一种是老金记得编号直接按编号找柜子。相应地,变量也有两种取值方法,一种是通过变量名取值,一种是通过变量地址取值。
在解除绑定关系之前,老金就一直对这个柜子有使用权,它是专属于老金的(这叫变量的生存期)。
老金在A店存了包,结果跑去B店取,那肯定是取不到的(这叫变量的作用域)。