个人主页: 长夜漫漫想学习
本文收录专栏: C语言学习之路
其他专栏: ARM学习之路
学习格言:路漫漫其修远兮,吾将上下而求索
欢迎点赞、关注、收藏( •̀ ω •́ )✧ 一起努力,一起学习!
目录
1、数组指针
2、数组指针与二维数组
3、数组指针和二维数组间关系
4、指针数组
5、二级指针
有一种指针,专门用来表示整个数组的地址,指针类型为数组类型,叫做数组指针
格式:元素类型 (* 指针变量名)[元素个数];
int (*p)[5]; //表示指向(存储)一个一维数组的地址 ,一维数组有5个元素每个元素为int类型
int a[5];
p = &a;
数组指针指向一个数组,是整个数组的地址
二维数组:有多个元素,每个元素是一个一维数组,数组名是第零个元素的地址
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;
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 :表示移动一个元素的大小(一维数组中的元素值)
二维数组可以和数组指针相互替换使用,是一致的
指针数组:每一个元素就是一个指针,就是相同类型的指针变量的集合,多个同种类型的指针变量的集合
格式:指针指向类型 * 数组名[元素个数];
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];
指针变量也有地址,需要使用指针变量来存储指针变量的地址,叫做二级指针
格式:指向变量类型 * * 指针变量名
int ** p;//定义一个二级指针
int *q; //一级指针
int * a[10];//指针数组
p = &q; //二级指针与一级指针关系
p = a; //二级指针与指针数组关系
//p+1 == a+1;
//*(p+1) == a[1] == *(a+1);
6、总结
数组指针与二维数组等价
指针数组与二级指针等价
✨本篇到此结束啦!欢迎点赞收藏❤关注