这个int类型的不是在内存中占四个字节吗?可是我编了这个实验了下,出了点问题
可是这个第四个和第八个的地址是什么鬼??还有,一直弄不明白,这个内存不是说是在计算机中是一个个小格子样子的吗?每个小格子只可以放一个字节,而且每个小格子都有自己的地址,我这一个int类型的变量就占了四个字节,他是把四个小格子合成一个了??,如果是的话那地址也要变了?变了的话变成这四个盒子哪个的地址啊?还是再弄个新的地址,再弄个新地址的话,第四个小格子之后的地址都要变吗?那不就乱套了吗?
我电脑是win10,64位系统
第一个问题:int占用多少字节内存用sizeof(int)可以知道。
第二个问题:第四个和第八个的地址就是a[3]和a[7]这两个元素各自在内存中的地址(可以理解为门牌号,快递是怎么找到你家的?)
a[3]的地址为0x70fe1c a[7]的地址为0x70fe2c
(2c-1c)/4=(44-28)/4=16/4=4,也就是你的sizeof(int)占用四个字节内存空间
第三个问题:可以理解为一个字节的内存就是一个小格子,确实也是一个小格子一个地址(门牌)
数据类型我个人理解为是对内存数据访问读写的一种描述方式,本质上int并没有合并小格子,只不过是占用了四个小格子,这四个小格子依旧有自己的地址。
只不过按照int的方式来读写的话,就是一次性读写sizeof(int)个字节的内存单元,也就是说如果a[3]变量的首地址是0x70fe1c,那么读写这个int变量相当于同时读写0x0x70fe1c,0x0x70fe1d,0x70fe1e,0x0x70fe1f四个格子,然后将四个格子的数据组织成为你所看到的一个整数。同理因为数组的地址是连续的,所以a[4]的首地址就是a[3]首地址+sizeof(int)也就是0x70fe1c+4=0x70fe20,并不需要弄新的地址。
你输出的是所存放数据单元的首地址,一个int型占四个字节,在取数的时候会根据首地址取出占四个字节的完整int型数据;第四个和第八个地址输出的是
a[3]和a[7]的首地址。
0x70fe10 0x70fe14
对比这些数据的地址,就很明显了int类型的数据大小 4 节。。
输出正常啊, 输出的是16进制, 所以第四个 第八个 地址中有 c 。 变量或对象在内存中存有两个重要因素, 第一个是首地址,就是它存放的位置
, 也就是通过取地址符 & 得到的, 第二个因素就是它占内存的大小(这个和这个变量类型相关,可以使用sizeof得到)
谢谢,大家的回答,我提出问题之后,最近就一直有别的事,就一直搁置了大家的回答,不好意思哈,回答就不一一回复了,就在这统一说声谢谢吧。