C语言
#include <stdio.h>
int main()
{
int a = 1;
int *b = &a;
printf("%d id= ",a);
printf("%d\n",b);
a = 2;
printf("%d id= ",a);
printf("%d",b);
return 0;
}
C语言运行结果:
a=1时地址:6487628
a=2时地址:6487628
a=2时地址:6487624
Java中变量的地址变化
public static void main(String[] args) {
int a = 1,b;
// 对象是在右边先被创建或者被获取,在此之后左边的变量名才会被绑定到对象上,这就像为对象贴上了标签。
// 变量名本质上是对象的标签或者说是对象的名字,当然一个对象可以有多个标签或者名字。
// 以上的变量赋值,应该说成把变量分配给对象更合理。
// 1 这个整型对象会在内存中先被创建,之后再把变量名 a 分配给这个对象。
System.out.println("a=1时地址:" + System.identityHashCode(a));
a = 2;
b = 1;
// 把变量名 b 分配给1 这个整型对象
// 2 这个整型对象会在内存中先被创建,之后再把变量名 a 分配给这个对象覆盖掉。
System.out.println("a=2时地址:" + System.identityHashCode(a));
System.out.println("b=1时地址:" + System.identityHashCode(b));
}
Java语言运行结果:
a=1时地址:2083562754
a=2时地址:1239731077
b=1时地址:2083562754
Python中变量的地址变化
a = 1
# 先后再前
# 对象是在右边先被创建或者被获取,在此之后左边的变量名才会被绑定到对象上,这就像为对象贴上了标签。
# 变量名本质上是对象的标签或者说是对象的名字,当然一个对象可以有多个标签或者名字。
# 以上的变量赋值,应该说成把变量分配给对象更合理。
# 1 这个整型对象会在内存中先被创建,之后再把变量名 a 分配给这个对象。
print("a=1时地址:",id(a))
a = 2
b = 1
# 把变量名 b 分配给1 这个整型对象
# 2 这个整型对象会在内存中先被创建,之后再把变量名 a 分配给这个对象覆盖掉。
print("a=2时地址:",id(a))
print("b=1时地址:",id(b))
Python语言运行结果:
a=1时地址: 140721792049808
a=2时地址: 140721792049840
b=1时地址: 140721792049808