类结构探索之-内存偏移

变量的指针与内存关系

局部变量是由系统分配在栈区的,而栈区的内存是连续的。

定义两个局部变量,看一看他们的地址有什么关系。如图:


两个局部变量的地址

从图中可以看到两个变量的地址相差了4。而int在内存中所占的大小正好也是4,这就说明了他们在内存中是连续存在的。两个变量与数字10在内存中是怎么体现的呢?请看下图:


对象内存与指针的关系

看过局部变量的内存关系,接下来看看对象指针跟内存直接的关系。还是先创建两个对象,然后打印对象的指针。如图所示:



可以看到打印出来的指针地址都不一样,那么对象的指针跟内存之间又存在怎样的关系呢?还是从用一幅图来体现一下:



这里每个对象都对应着自己的内存空间,所以分别改变属性值并不会导致其他对象的属性值改变。

数组的指针和内存关系

最后,看一下数组在内存里面的存储方式:

数组在内存中的表现

从图中打印的数据我们可以看出,数组的元素在内存中应该连续存在的。而且通过指针变量d存储数组的首地址,然后竟然可以通过d+1获取到数组下标为1的元素地址,真是有点神奇。

其实这在C语言中叫指针偏移,然而我也不是很了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容