c语言:多级指针

指针的指针

指针记录着目标数据对象的首地址和类型。

那么能不能有一个指针它记录一个指针的首地址和类型呢?

我们对一个指针再次取地址,看看能不能编译通过。

编译可以通过。

我们对整型n变量取地址,获取到一个 int * 类型的指针。将指针存储到指针变量pn中。

之后,我们再对pn取地址。从程序运行的结果中可以看到,对pn取地址确实还可以获得一个指针。


指针的指针是什么类型

那么这个指针是什么类型呢?再加一个星号就可以了。

int * 的指针的类型为 int **

注意哦,指针变量的声明中,变量名与类型之间的空格不是那么严格。

int *p; // 正确

int*p; // 正确

int* p; // 正确

int * p;// 正确

所以这个指针的指针,我们可以写为如下几种形式:

int **p;  // 正确

int**p;   // 正确

int* *p; // 正确

int * *p; // 正确

int * * p; // 正确


多级指针

int ** 是一个 int * 类型数据对象的指针,所以被称之为二级指针。

和普通指针一样,它也是可以使用取值运算符*,来获取目标数据对象的。

取地址过程:

n使用取地址运算符,获得n的指针pn,类型为 int *

pn使用取地址运算符,获得pn的指针pnn,类型为 int **

取值过程:

pnn使用取值运算符,将 int ** 还原为 int *  

 *pnn使用取值运算符,将 int * 还原为 int 。即,还原为n。我们将问题故意复杂化一点


你想成为五星程序员吗?

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值