万字完整版【C语言】指针详解~

03-11 1260阅读

一、前言

  • 初始指针(0):着重于讲解指针的概念、基本用法、注意事项、以及最后如何规范使用指针
  • 深入指针(1):讲解指针变量常见的类型,如何去理解这些类型、最后就是如何正确的使用
  • 深入指针(2):讲解指针较为高阶的用法,理解难度 中度
  • 深入指针(3):在(2)的基础上,再讲解其余指针类型的高级用法,理解难度 偏难
  • 深入指针(4):指针相关的题目、及答案。理解难度 中度

    二、初识指针(0)

    1.内存与地址
    • CPU(中央处理器),需要向内存读取数据,处理完数据后,还需要将数据放回到内存中,那CPU是如何从内存找到他自己想要的数据呢?        
    • 现实中,我们去向宾馆申请一间房间,前台的服务人员,会给我们找出一间闲置的空间供给我们使用,并返回给我们一个房卡。那她是如何快速的找到一间闲置的空间呢?那是因为每一间闲置的空间都有编号。当我们不用的时候,她们就会收回这间屋子的使用权。
    • 我们将CPU抽象为前台服务人员,把内存抽象为宾馆的房子,把CPU读取数据抽象为去宾馆申请房子,把CPU返回数据抽象为收回这间屋子的使用权......
    • 我们就可以推断出,内存也被划分了很多个内存单元,每一个内存单元有自己的专属编码
    • 结论:内存被划分为很多个大小为一个字节的内存单元,每一个内存单元都有相对应的内存编码,内存编码又叫做地址。CPU处理数据的时候,则是根据地址去找到所需的数据。
      2.指针变量与地址
      • 有时候,我们自己要处理数据的时候,也必不可少要用到地址,所以C语言允许我们获得变量的地址,并使用地址,或者通过地址找到该数据,进行使用。
      • C语言规定了一个指针变量,专门用来存储数据地址,并且有两个操作符(取地址操作符&,解引用操作符*)。
      • 下面是其简单的使用:
      • 万字完整版【C语言】指针详解~
      • 结论:内存单元编码 == 地址 == 指针
        3.指针类型的刨析
        i.指针的理解 
        • (type) * p;

        • p     ->p是一个变量
        • *      ->变量p前面的(*),说明它是一个指针类型的变量
        • type->说明了指针变量p,所指向对象的类型
        • 万字完整版【C语言】指针详解~
          ii.指针在空间的大小
          • 了解过音乐的都知道,音乐有这几个音阶(do、re、mi、fa、sol、la、si),在钢琴制作的时候,也没有把哪个键标记下音阶,那演奏家是如何找到音阶的吗?那是因为音阶的分布是被死规定过的,且是公认的,无论哪几种钢琴,它的音阶所在按键位置是不变的。
          • 事实上,内存单元的编号也被按照某种标准的规定所设定,计算机中存在地址线,正电流表示二进制1,负电流表示二进制0;在32位平台上,由32根地址线的表示一个内存单元的地址,也就是一个整型,在64位平台上,由64根地址线的表示一个内存单元的地址,也就是两个整型。
          • (int)类型在内存中占据4个字节,但我们取它地址的时候,常用第一个内存单元的地址,作为该int类型的地址。
          • 小结:在32位平台上,地址由32比特位构成,也就是1个(int)类型的大小,4个字节;在64位平台上,地址由64位比特位构成,也就是2个(int)类型的大小,8个字节。无论什么类型的指针,只要是用来存放地址的,其指针类型的字节大小只与平台有关->(4/8)。
          • 万字完整版【C语言】指针详解~
          • 万字完整版【C语言】指针详解~

            iii.指针类型有什么用? 

            • 这里我就不卖关系了,直接告诉你们结论:
            • 指针类型决定着,指针变量解引用后所能操作的空间。
            • 指针类型决定着,指针变量+/-n个整数后,指针的地址变化的字节(为指针所指向对象的类型在内存空间占用字节大小的n倍)。
            • 万字完整版【C语言】指针详解~
            • 万字完整版【C语言】指针详解~
              4.const修饰指针
              • 关键字const的作用:
              • 使变量,具有常量属性->其变量所存储的数据,不可被修改(但它仍算是变量,并非我们常说的常量) 
              • const在(*)的左边,const修饰的是指针变量所指向的对象不能够被修改。
              • const在(*)的右边,const修饰的是指针变量所存储的地址不能够被修改。
              • 万字完整版【C语言】指针详解~
                5.指针的运算
                i.指针+/-整数
                • 指针 +/- 整数(n) = 指针当前的值 +/- n*(指针所指向对象的类型在内存中所占用的字节大小)
                • 万字完整版【C语言】指针详解~
                  ii.指针-指针
                  • 在我日常生活都会用到日期,月份 +/- 天数 = 月份;月份 - 月份 = 天数。
                  • 如果我们把月份抽象为指针,把整数(n)抽象为天数。我们就能推测出指针 - 指针 = 此整数(n);n的意义是:两个指针之间元素的个数。
                  • 注:两个指针必须指向同一块空间,比如一个一维数组,一个指针指向数组的首元素,另一个指针指向数组的末元素,结果就是数组的元素的个数。就好比农历的月份 - 阳历的月份没有意义。
                  • 万字完整版【C语言】指针详解~
                    iii.指针的关系运算
                    • 指针的关系运算很好理解,就是指针之前可以进行(,
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]