zoukankan      html  css  js  c++  java
  • 指针的内存布局

    指针的内存布局

      

      先看下面的例子

    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 *) 来进行验证。

      

  • 相关阅读:
    Go:错误处理
    Go:闭包
    Go:内置函数
    Go:函数、defer
    mongodb 在PHP中常见问题及解决方法
    PHP 下载apk文件
    阿里云短信服务 PHP
    tp 创建文件并写入数据
    微信小程序中的加载更多(即列表分页)
    百度地图api逆地址解析 PHP
  • 原文地址:https://www.cnblogs.com/doitjust/p/11308380.html
Copyright © 2011-2022 走看看