C#定义变量左右值及桶模拟
上图显示了具有两个分支的变量i,这两个分支分别名为lvalue和rvalue.
变量的lvalue是指存储变量的内存地址。变量lvalue总是被解释为内存地址,是location value 的简写。
变量rvalue是指当前存储在变量中的实际值,代表register value。当定义一个变量时,lvalue先被赋值,值是分配的地址号。当对变量赋值时,rvalue被赋值,值就是被赋予的实际值。同时,lvalue与rvalue可以理解成变量的左右值,即left value和right value。
举例来说,语句
int i;
i = 10;
是创建了一个名为i的整型变量,赋值10。那么当执行int i时
左值被填入一个900000,这就是分配的地址。
当执行 i = 10时
右值填入了10这个实际的值。
桶模拟(bucket analogy)有助于理解变量的左右值。
执行以下语句:
int val;
visual studio会向内存管理系统发送请求,为定义的int类型开辟一个4字节的空闲内存。假设一切正常,申请响应,内存管理系统开辟了750000这个地址,并将这个地址号返回赋值给lvalue中。
桶模拟假设有一些空桶放在地上,桶的大小不相同,有的能放1字节,有的能放16字节。这里定义int,那么此时的桶能放4字节。现在给桶标号,本例中桶的名字叫val,那么假设这个桶放到计算机中,并将它放在内存地址750000的位置上。就可以看到
桶的lvalue表明从何处找到桶,而桶的rvalue表明桶中装的数据。