• 指针的内存布局


    指针的内存布局

      

      先看下面的例子

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

      

  • 相关阅读:
    中文排版CSS心得
    用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
    Linux 下忘记root密码怎么办
    CSS手册简编
    SC 命令
    DataGrid的数据导入到Excel或CSV
    asp中关于'+'的特殊处理
    卡巴斯基汇总收藏版
    一步一步学习BI(2)Integration Services简单ETL工程
    优化递归的效率zz
  • 原文地址:https://www.cnblogs.com/doitjust/p/11308380.html
Copyright © 2020-2023  润新知