网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

底层解析C指针(一)

时间:2023-02-15 14:47

人气:

作者:admin

标签: C语言  内存  指针  C指针 

导读:指针是C语言中的精髓部分,同样也是C语言的难点所在,下面从最底层来分析C指针。...

指针是C语言中的精髓部分,同样也是C语言的难点所在,下面从最底层来分析C指针。

首先先放节论,这样可能会节省部分人的阅读时间。

对于一级指针:

poYBAGPsf2WAZ0amAAB-Mt8035c089.png

对于二级指针:

poYBAGPsf2WAFb0BAACmObcSN3E546.png

同理我们有:

n级指针

pYYBAGPsf2WAfhFjAACRuL9Vzm8513.png

需要注意的是,上面的所有指针都需要初始化,如果看懂了上面的图,也就知道为什么必须初始化的原因了,其实指针实质上是不存在的,编译器会将其全部替换为地址,正因为如此,导致很多初学者被各种符号晕头转向,如同普通变量一样,指针也是一种变量,说到底,变量其实也不存在,在编译器编译的过程中,所有的变量会被替换掉,真正有用的只是变量的值, 如果想详细了解此类容,读者可以看编译原理这本书。

下面我们来验证上面的结论

poYBAGPsf2WANRfCAAAViDS9VMk169.png

上面我采用了直接强制转换的方式来分配地址,这个并不是每次执行都会成功,原因是强行分配的地址很可能恰好被使用或者是内存碎片再或者没有进行字节对齐,这些都会导致强行分配地址时失败,因此可以多进行测试,下面得到输出。

poYBAGPsf2WADoitAAAQtFZnoFY977.png

现在无法知道,为了直观,我们直接打开Debug调试,同时设置断点,现在我们打开Memory dump,如图所示

pYYBAGPsf2WAV0udAAAfYS9uSWw751.png

x86结构的内存结构为大端模式,低字节放到高地址。

此时我们输入0x60fef2,点击"GO",可以看到内存中的数据如下图所示:

pYYBAGPsf2WAM1j_AAAlhJEhr7o681.png

可以看到内存地址为0x60fef2处的数据为5

然后输入0x60fefc点击"GO",可以看到内存中的数据如下图所示:

pYYBAGPsf2WAKRFAAAAlPNUripA667.png

可以看到内存地址为0x60fefc处的数据为0x60fef2

可以看到这个完全符合上面的节论,

需要说明的是,我们写程序时虽然使用了 p, &p, *p这三个符号,但是计算机编译过程中只有两个有用的数据

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信