C语言的二级指针(指向指针的指针)

  1. 我们大家都知道,指针是内存中的地址,它可以指向一份普通的数据类型,例如 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 ** 的声明!

 

猜你喜欢

转载自www.cnblogs.com/lililixuefei/p/11855981.html