0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

底层解析C指针(一)

CHANBAEK 来源:博客园-LSWen 作者:博客园-LSWen 2023-02-15 14:47 次阅读

指针是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这三个符号,但是计算机编译过程中只有两个有用的数据

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2957

    浏览量

    73782
  • C语言
    +关注

    关注

    180

    文章

    7588

    浏览量

    135737
  • 指针
    +关注

    关注

    1

    文章

    477

    浏览量

    70488
  • C指针
    +关注

    关注

    0

    文章

    10

    浏览量

    6388
收藏 人收藏

    评论

    相关推荐

    C语言指针详细解析

    可以对数据本身,也可以对存储数据的变量地址进行操作。 指针个占据存储空间的实体在这段空间起始位置的相对距离值。在C/C++语言中,
    发表于 09-14 10:03

    C指针详解

    底层的软件打交道。这个时候,指针便体现出它独特的魅力。指针的知识很多,有本经典的书叫《C
    发表于 12-29 07:20

    C语言指针电子教程

    本资料是份不错的关于C语言指针的电子教程,希望对大家有所帮助... 指针简介 指针C语言中广
    发表于 07-30 16:00 77次下载

    C指针习题答案配C指针

    C指针习题答案配C指针
    发表于 09-07 14:29 6次下载
    <b class='flag-5'>C</b>和<b class='flag-5'>指针</b>习题答案配<b class='flag-5'>C</b>和<b class='flag-5'>指针</b>

    C语言指针解析

    指针的概念 指针个特殊的变量,它里面存储的数值被解释成为内存里的个地址。要搞清
    发表于 11-02 11:38 2次下载

    c语言函数指针定义,指针函数和函数指针的区别

     往往,我们提到指针函数和函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3603次阅读

    基于C语言中指针的基本用法解析

    C语言中其它的知识都学得可以,唯独指针搞不懂。如果是这样,我可以很负责的告诉你,对于这门编程语言,你等于是没学。所以学好指针对于初学者是非常重要的。或许你会觉得它有点抽象,但是当你彻底理解了
    的头像 发表于 01-09 15:12 4756次阅读

    从最底层的内存存储空间开始带你了解C语言指针

    、前言 二、变量与指针的本质 三、指针的几个相关概念 四、指向不同数据类型的指针 五、总结 、前言 如果问
    的头像 发表于 02-02 10:40 2383次阅读
    从最<b class='flag-5'>底层</b>的内存存储空间开始带你了解<b class='flag-5'>C</b>语言<b class='flag-5'>指针</b>

    C语言-指针定义与使用

    指针在很多书本上都是当做重点来介绍,作为C语言的灵魂,项目里指针无处不在。 这篇文章介绍指针的基本用法。
    的头像 发表于 08-14 10:02 1293次阅读

    C语言指针详细解析

    可以对数据本身,也可以对存储数据的变量地址进行操作。 指针个占据存储空间的实体在这段空间起始位置的相对距离值。在C/C++语言中,
    的头像 发表于 11-14 16:53 2165次阅读
    <b class='flag-5'>C</b>语言<b class='flag-5'>指针</b>详细<b class='flag-5'>解析</b>

    C语言中的悬空指针和野指针是什么意思?

    提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:“悬空
    的头像 发表于 02-09 17:20 1041次阅读

    底层解析C指针(二)

    篇主要讨论了C指针的本质,但并没有解释指针的类型问题,这次我们重点来讨论指针的类型与指针内存
    的头像 发表于 02-15 14:48 665次阅读
    <b class='flag-5'>底层</b><b class='flag-5'>解析</b><b class='flag-5'>C</b><b class='flag-5'>指针</b>(二)

    详解C语言指针底层基本原理

    说到指针,估计还是有很多小伙伴都还是云里雾里的,有点“知其然,而不知其所以然”。但是,不得不说,学了指针C语言才能算是入门了。指针C语言
    的头像 发表于 04-06 10:43 1180次阅读

    C++智能指针底层实现原理

    C++智能指针的头文件: #include 1. shared_ptr: 智能指针从本质上来说是个模板类,用类实现对指针对象的管理。 te
    的头像 发表于 11-09 14:32 664次阅读
    <b class='flag-5'>C</b>++智能<b class='flag-5'>指针</b>的<b class='flag-5'>底层</b>实现原理

    C语言的指针用法

    C语言编程中善用指针可以简化些任务的处理,而对于些任务(比如动态内存分配),必须要有指针才行的。也就是说精通
    发表于 03-05 14:22 299次阅读
    <b class='flag-5'>C</b>语言的<b class='flag-5'>指针</b>用法