打印
[应用方案]

用我所学去讲C语言指针

[复制链接]
676|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
萧洛毫|  楼主 | 2019-4-30 23:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 萧洛毫 于 2019-4-30 23:07 编辑

一、指针的定义
        指针是内存单元的编号。内存单元是以字节为单位的。所以指针就是字节的编号。   
比如我们的个人电脑,内存一般4GB吧,那么一共就有 :   4*1024*1024*1024 = 4294967296 字节,也就是4294967296个编号。一个字节拥有一个编号,
范围从 0  ~  4294967296-1 。
画个图表示:(注意字节由8位bit组成,为了直观我没画出来)

但是呢,一般我们是用16进制来表示的这些编号,但效果都一样。

使用特权

评论回复

相关帖子

沙发
萧洛毫|  楼主 | 2019-4-30 23:08 | 只看该作者
二、变量与内存的关系
       现在我们来看C 变量在内存中的样子。我们使用自动变量(局部变量)来讲解。
       int   a  =  5;    //假设a存储在编号为0x02开始的位置
      
说明:
      内存可以存储数据,所以我们把每个字节当做是一个“箱子”。数据存入内存就好比在箱子里面放数据
      但是C语言的不同数据类型占用的字节数是不都一样的,所以,每种数据类型占的”箱子”的个数不都一样。
      比如char型,只要一个字节就够了,所以一个字符只需一个“箱子”。
      而int型需要4(一般是4个字节)个“箱子”才放得下。
      double型则需要8个“箱子”。

来分析上图中用橙色框起来的4个字节的内存块,这里就存储了a这个变量。
我们从4个方面去讨论这个内存块:
1、内存的数据
     我们的变量赋值为5,所以内存的数据就是    0000 0000    0000 0000     0000 0000    0000 0101   (大端模式)
                     每个字节地址:                        0x02             0x03               0x04             0x05

2、*内存的名字  (对于我们的程序使用的内存来说,并不是每一个内存块都有名字)
     名字就是变量名a
3、内存的地址
     变量a占用了4个字节,那么,哪一个字节的地址,才是变量a的地址呢?答:第一个低地址字节的地址,也就是0x02
4、内存的宽度
     这里的a变量占用了4个字节,这就是他的宽度。
     这里提一下,为后面讲指针的宽度做铺垫   :)


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

254

帖子

0

粉丝