1
2
|
int
a=
3
;
int
b=
3
;
|
编译器先处理int a= 3;首先它会在栈中创建一个变量为a的内存空间,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b= 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。
然后我个人的理解:当函数返回后,变量a和b都出栈了,但是3在栈中的内存地址没有释放,如果获得了这个地址,3这个值就还可以使用,如果3在栈中的内存地址被新入栈的变量重新分配覆盖了,就无法使用了 。