鱼C论坛

 找回密码
 立即注册
查看: 2364|回复: 4

[技术交流] 请教下C中地址的问题

[复制链接]
发表于 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语言,计算机很多底层的原理还搞不懂,还望大神具体解答什么原因?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-4 15:32:12 | 显示全部楼层
没看明白问题,机制是编译器和机器内部设置好的,刚开始学习或者对计算机语言只是应用层面的话,建议不要去浪费时间深究这些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 15:37:34 | 显示全部楼层
数据类型决定了指针的步长~
如你所说,数组分配的是一段连续的存储空间,
以你的 int a[3] = {0,1,2} 为例  他们在内存中申请了12字节的空间~换句话说~你把这个数组当做变量的批量管理。。你申请了三个int型的变量~ 这三个变量的名字分别为 a[0], a[1], a[2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 16:50:54 From FishC Mobile | 显示全部楼层
没说代表同样的意思,一个是地址的差值,一个是数据本身
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 19:21:51 | 显示全部楼层

a+1 地址加1并不是简单的 1+1这样数学上的加1。而是加1个数据类型的大小,相当于数学上的 a + sizeof(int)。
语法上是这么规定的。就好比你买东西要用钱一样。
那么问题就结了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-6 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表