指针深度理解

24 篇文章 0 订阅
20 篇文章 0 订阅

深度理解指针

指针

指针是什么? 就一句话,指针就是地址。指针里面存的是地址而不是像int、char等里面存的是具体的值,而对指针里的地址解引用之后才可以得到具体的值

指针数组

int *p1[10];

操作符“[]”的优先级比“*”高,所以p1先和“[]”结合,形成数组,之后这个数组再和“*”结合,形成指针数组。换句话说,在上述定义里面,p1是一个数组,只不过这个数组有点特殊:它的每个元素都是一个int型的指针。

数组指针

int (*p2)[10];

在这个定义里面,由于有括号,所以p2先和“*”结合形成指针,然后再和“[]”结合,形成数组指针。换句话说,p这个指针指向的是一个大小为10个int的数组。

函数指针

char ** (*p3)(int i, char *b);

上述代码定义了一个返回类型为char **、参数为int 型和char *型的函数指针。函数指针。。。先函数后指针,根据名字推断:指针p3肯定与函数最后结合。而事实的确如此:*p3由“()”包起来,p3先是一个指针,然后才是指向一个函数。

如果去掉p3前面的*呢? 那就成了一个函数声明,与指针就没关系啦!

值得注意的是,“typedef char **(*p3)(int i, char *b)” 表示p3是一种数据类型而不是指针!!!!!!

函数指针数组

char ** (*p4[10])(int i, char *b);

这与指针数组极为相似。为什么不说与函数指针相似呢?我们来分析一下:离p4最近的是“[]”和“*”,但由于优先级问题先和“[]”结合形成数组,然后和“*”结合形成指针数组–这不就是与指针数组极为相似嘛。至于函数,它在最外面,优先级最低,所以就最后结合形成函数指针数组。
对于p4而言,它首先是一个数组,数组里面存的是指针,并且这些指针指向的是函数。

指向函数指针数组的指针

char ** (*(*p5)[10])(int i, char *b);

p5是一个指针,这个指针指向一个包含10个元素的数组。这个数组里的每个元素都是一个指针,指向返回类型为char **、参数为int 型和char *型的函数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值