变量的指针与内存关系
局部变量是由系统分配在栈区的,而栈区的内存是连续的。
定义两个局部变量,看一看他们的地址有什么关系。如图:
两个局部变量的地址
从图中可以看到两个变量的地址相差了4。而int在内存中所占的大小正好也是4,这就说明了他们在内存中是连续存在的。两个变量与数字10在内存中是怎么体现的呢?请看下图:
对象内存与指针的关系
看过局部变量的内存关系,接下来看看对象指针跟内存直接的关系。还是先创建两个对象,然后打印对象的指针。如图所示:
可以看到打印出来的指针地址都不一样,那么对象的指针跟内存之间又存在怎样的关系呢?还是从用一幅图来体现一下:
这里每个对象都对应着自己的内存空间,所以分别改变属性值并不会导致其他对象的属性值改变。
数组的指针和内存关系
最后,看一下数组在内存里面的存储方式:
数组在内存中的表现
从图中打印的数据我们可以看出,数组的元素在内存中应该连续存在的。而且通过指针变量
d
存储数组的首地址,然后竟然可以通过d+1
获取到数组下标为1的元素地址,真是有点神奇。
其实这在C语言中叫指针偏移,然而我也不是很了解。