指针的内存布局

指针的内存布局

  

  先看下面的例子

int *p;

  大家都知道这是定义了一个指针p,但是p到底是什么东西呢?还记得第1章里说过“任何数据类型我们都可以把它当成一个模子”吗?p,毫无疑问,是某个模子“咔”出来的。我们也讨论过,任何模子都必须有特定的大小,这样才能“咔咔咔”。那“咔”出p这个模子到底是什么样子呢?它占多大的空间呢?现在用sizeof测试一下(32位系统):sizeof(p)的值为4。嗯,这说明“咔”出来的这个模子的大小为4字节。显然,这个模子不是“int”,虽然它的大小也为4。既然不是“int”,那肯定就是“int *”了。好,那现在我们就可以可以这么理解这个定义:

  一个“int *”类型的模子在内存上“咔”出了4字节空间,然后把这个4字节大小的空间命名为p,同时限定这个4字节空间里面只能存储某个内存地址,即使你存储别的任何数据,都经被当做地址处理,而且这个内存地址开始的连续4字节上只能存储某个int类型的数据。

  如上图所示,我们把p称为指针变量,p里面存储的内存地址处的内存称为p所指向的内存。指针变量p里存储的任何数据都将被当做地址来处理。

  我们可以简单地这么理解:一个基本数据类型加上“*”就构成了一个指针类型的模子。这个模子的大小是固定的,与“*”号前面的数据类型无关;“*”号前面的数据类型只是说明指针所指向的内存里存储的数据类型。所以,在32位系统下,不管什么样的指针类型,其大小都为4字节。可以测试  sizeof(void *) 来进行验证。

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/doitjust/p/11308380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值