C语言基础-指针深入16

来源:互联网 发布:产品经理 原型软件 编辑:程序博客网 时间:2024/06/03 20:52

1.指针为什么要分类型

   

    无论指针是什么类型,在内存中都是占据8个字节.既然指针都是占据8个字节.为什么指针还要分类型呢?

   通过指针间接的操作指针指向的变量的方式.

    int num = 10;

    int* p1 = #

    p1指针变量中存储的是num变量的地址也就是num变量的低字节的地址.

    通过这个p1指针其实只能找到这个地址的字节.

    这个时候,通过p1指针找到这个字节操作的时候,是操作多个字节空间呢?

    操作多少个字节是根据指针的类型来决定的.

    指针变量的类型决定了通过这个指针找到字节以后连续操作多少个字节空间.

    指针是int*  那么就连续操作4

    指针是double*那么就连续操作8

    指针是float* 那么就连续操作4

    指针是char* 那么就连续操作1

    所以,指针的类型如果不和指向的变量的类型相同话.那么通过指针就无法正确的操   作指向的变量.

    所以,指针变量一定要指向1个和自己类型相同的普通变量才可以.

2.多级指针

    一级指针.

    1个指针变量中存储的是1个普通变量的地址,像这样的指针,我们就叫做一级指针.

    二级指针.

    1个指针变量中存储的是1个一级指针变量的地址,像这样的指针,我们就叫做二级指针.

    三级指针.

    1个指针变量中存储的是1个二级指针变量的地址,像这样的指针,我们就叫做三级指针.

多级指针定义.

 

    1).只能存储一级指针变量的地址.这样的指针叫做二级指针.;

    2).声明二级指针的语法:

        a. 声明一级指针:数据类型*指针名;

        b. 声明二级指针:数据类型**指针名;

        c. 声明三级指针:数据类型***指针名;

    4).一级指针只能存储普通变量的地址.

        二级指针只能存储一级指针变量的地址

        三级指针只能存储二级指针变量的地址.

        n级指针只能存储n-1级指针变量的地址.

        否则就会出问题.

    5). 初始化.

 

         使用取地址运算符.拿到对应的指针变量的地址赋值给指针变量就可以了.

         int num = 10;

         int* p1 = # //p11个一级指针.存储的是num变量的地址.

         int** p2 = &p1; //p21个二级指针,存储的是一级指针变量p1的地址.

         int*** p3 = &p2;//p31个三级指针,存储的是二级指针变量p2的地址.

    多级指针使用:

      使用指针的时候.有几颗星就拐几个弯.

 

        *指针变量名.代表这个指针指向的变量.

        **指针变量名.这个指针至少要是1个二级指针.代表这个指针指向的指针指向的变量.

        *p1  代表p1指针指向的变量.

        **p1  代表p1指针指向的指针指向的变量.

        ***p1 代表p1指针指向的指针指向指针指向的变量.

       1. n级指针只能存储n-1级指针变量的地址.

       2. 使用指针间接访问指向的变量的时候.  

             有几颗星就拐几个弯.


3指针加减法

    指针与整数进行加减运算.

    比如指针 + 1;

    并不是在指针地址的基础之上加1个字节的地址.而是在这个指针地址的基础之上加1个单位变量占用的字节数.

    如果指针的类型是int* 那么这个时候1代表4个字节地址.

    如果指针的类型是double* 那么这个时候1代表8个字节地址.

    如果指针的类型是float* 那么这个时候1代表4个字节地址.

    如果指针的类型是char* 那么这个时候1代表1个字节地址.



原创粉丝点击