【从零基础学习C语言】数组指针与指针数组—第八篇

6d63dc5dd3994f75ae53a20768cc10f6.gif

个人主页: 长夜漫漫想学习 

本文收录专栏: C语言学习之路 

其他专栏: ARM学习之路 

学习格言:路漫漫其修远兮,吾将上下而求索

欢迎点赞、关注、收藏( •̀ ω •́ )✧   一起努力,一起学习!

目录

        1、数组指针

        2、数组指针与二维数组

        3、数组指针和二维数组间关系

        4、指针数组

        5、二级指针


1、数组指针

        有一种指针,专门用来表示整个数组的地址,指针类型为数组类型,叫做数组指针

        格式:元素类型 (* 指针变量名)[元素个数];

    int (*p)[5]; //表示指向(存储)一个一维数组的地址 ,一维数组有5个元素每个元素为int类型
    int a[5];
    p = &a;

       数组指针指向一个数组,是整个数组的地址

2、数组指针与二维数组

        二维数组:有多个元素,每个元素是一个一维数组,数组名是第零个元素的地址

    int a[5][6];
    &a;//是整个二维数组地址
    a == &a[0];//第0个元素的地址,也是整个一维数组的地址

        a[0]是第零个元素,是一维数组,a[0]就是一维数组的数组名,a[0]也是一维数组的第零个元素的地址

    a[0] == &a[0][0];

        普通一维指针存储普通元素的地址,可以存储一维数组的数组名

        数组指针存储整个数组的地址,可以存储二维数组的数组名

    int a[5];    //定义一维数组
    int b[3][5]; //二维数组
    int * p;    //定义一个指针变量
    int (*q)[5]; //定义一个数组指针
​
    //以下是他们之间的关系
    p = a;
    p = b[0]; p = b[1];
    q = b;
    q = &b[2];
    q = &a;

3、数组指针和二维数组间关系

    int a[3][5];
    int (*p)[5];
​
    p = a;
    *p == a[0];
    *(p+1) == a[1];
    *(p+1) +1 == a[1]+1;//二维数组中,第1个元素是一维数组a[1],a[1]元素值,就是一维数组代表一维数组的数组名,向后移动一个一维数组的成员元素大小
    *(*(p+1)+0) == **(p+1) == a[1][0]
  • 二维数组名 + 1:表示移动一个元素的大小(一个一维数组)

  • 二维数组名[下标] +1 :表示移动一个元素的大小(一维数组中的元素值)

  • 二维数组可以和数组指针相互替换使用,是一致的

【从零基础学习C语言】数组指针与指针数组—第八篇_第1张图片

4、指针数组

        指针数组:每一个元素就是一个指针,就是相同类型的指针变量的集合,多个同种类型的指针变量的集合

        格式:指针指向类型 * 数组名[元素个数];

    int *p[5];//5个int *类型指针变量的集合数组,有5个元素每个元素都是指针
    int * q;
    int a[5];

    //​下面是他们之间的关系
    p[0] = a;
    q = a;
    *(q + 1) = a[1];
    *(a+1) = q[1];
    *(p[0] + 0) = a[0];
​

5、二级指针

        指针变量也有地址,需要使用指针变量来存储指针变量的地址,叫做二级指针

        格式:指向变量类型 * * 指针变量名

    int ** p;//定义一个二级指针
​
    int *q; //一级指针
​
    int * a[10];//指针数组
​
    p = &q; //二级指针与一级指针关系
​
    p = a; //二级指针与指针数组关系
​
    //p+1 == a+1;
    //*(p+1) == a[1] == *(a+1);

6、总结

  • 数组指针与二维数组等价

  • 指针数组与二级指针等价

 ✨本篇到此结束啦!欢迎点赞收藏❤关注

ade2d02221184de18874af569fd12e2c.png

你可能感兴趣的:(C语言学习之路,c语言,学习,vim,c#,开发语言)