-
我们大家都知道,指针是内存中的地址,它可以指向一份普通的数据类型,例如 int、double、char等,
注意,指针也可以指向一份指正类型的数据,例如 int *、double * 、char * 等
如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
例如:
int a =100; int *p1 = &a; int **p2 = &p1;
我刚看到这个 int ** p2 的时候,我是真的搞不懂为什么会有两个 ** 呢?
我是这样想的:a 标识符 在内存中存放的是100 , 指针 p1 指向的是 a 所对应的地址,即 p1中存放的是 a 在内存中的地址,如果我们还需要一个指针来指向 p1 的地址,我们直接 int *p2 = &p1 不就好了,为什么要 int **p2 = &p1。仔细思考之后,我有了想法:
指针变量也是一种变量,也会占用存储空间,也可以使用&
获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*
。p1 是一级指针,指向普通类型的数据,定义时有一个*
;p2 是二级指针,指向一级指针 p1,定义时有两个*
。
咱们看 p1 是 int * 类型的指针变量 它指向的是 int 类型的 地址
int ** p2 之所以会有两个 *是因为我们的 p2 是指向 int *类型的指针,它是一个二级指针,指向一级指针p1。我们可以分解来看 int ** p2,我们可以看做 int *( *p2) ,这里的 *p2表明这是一个指针,int * 表示 *p2是指向 int * 类型的指针
不知道这样说大家明白吗?
大白话在说一下吧,你看我们指向int类型的地址需要有一个 int * 的声明,那我们如果要指向 int * 类型的地址,我们是不是应该要有一个 int ** 的声明!