|
发表于 2018-3-4 14:52:41
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lomiss 于 2018-3-4 22:42 编辑
比如说定义一个数组int a[3]={0,1,2};
那么编译器会给这个数组分配一个连续的内存空间。每一段内存空间占sizeof(int),假设是32位操作系统,也就是四字节。
我测试时,这个数组的首地址都是16进制的,假设为0xbe09ffec。那么问题就是。为什么a+1,下一个元素的地址是这个16进制数加上一个四字节等于0xbe09fff0?相当于这个四字节就是0x00000004,但两者所代表的意义不一样啊。
-------------------------------
感觉我自己是有点过于纠结了。其实我的意思是在数学上这两者根本上就没法相加。这个16进制的地址是这片连续内存的首地址,而每个内存单元占1Byte,想要访问这片内存中其他元素值,就要按sizeof(int)为步长进行偏移,这个偏移量的单位是字节,但是这个16进制的地址在32位操作系统下按单位应该是位(Bit)。这个类似于1000kg+1g=1001kg一样是行不通的呀。
可能我之前表述有问题,现在才开始学C语言,计算机很多底层的原理还搞不懂,还望大神具体解答什么原因?谢谢 |
|