对*P++的理解,再联想~~~
前言:
最近在看一位叫朱有鹏大神的视频,讲的甚好。应此,我的感悟也因此被激发,准备针对朱老师将的内容,结合自己的理解,写一个系列的笔记博客~~大家可以去www.zhulaoshi.org观看视频~~
正文:
*P++,这种用法是很常见的,很有用的。但是不是很好理解,现在
来彻底分析下~~
首先*号和++号的优先级是同一级,但是它们的结合方向是从右边到左边。
那么很明显核心P先和++先结合,这个就确定了关键的一件事——++会让指针递增,而不是指针指向的数,
也就是说会递增的是p而不是*p。
但是这里的++,是后++。后++有个特点——++会在本条语句执行完之后执行。
知道了,这些之后*P++就可以理解了,他就等价于:先执行*P,然后将P++。
这里就很能体会到朱老师讲的:
1、首先找核心。这里是P。(核心其实就是关键变量)
2、然后找结合,先看核心离谁最近,再看核心更喜欢谁(优先级),结合之后就可以把结合形成的东西看成整体。
如,这里就是P++;那么就是*(P++)。但是这里++的特殊性,会先执行*P,但是P++始终是整体,
所以之后会执行P++,而不是(*P)++。
数组指针与指针数组也是这么分析:
int* p[];
首先核心是p,再看p更喜欢谁~~
[]是最高优先级的运算符(小括号排名第二,但是我们知道[]里只能放常量,无法放变量,而核心往往是变量
所以看上去小括号更牛逼些)。
所以p先和[]结合,和[]结合之后就成了p[],很明显这是个数组,p[]再和*结合就成了*p[],
就成了指针数组,应为p先[]结合,int* p[]的本质是个数组,然后数组内部存放的是int型的指针。
再看数组指针:
int(*p)[];分析流程还是遵循以上规则:
首先找到核心p,小扩宽把p与[]隔开了,那么此时p和*最近,他们可以结合,且结合成*p,很明显*p是一个
指针的形式,*p整体再和[]结合,这就成了数组指针,应为p先和*结合,所以他的本质是一个指针,这个指针
指向了一个int型的数组。
再看指针函数:
int *add();
首先核心是add,add先和优先级更高的小括号结合,就成了一个整体add(),很明显这是个函数。
add()整个再和*结合,就是指针函数了。应为add先和小括号结合,所以他的本质是一个函数。
一个能返回(一个int型)指针的函数。
最后看函数指针:
int (*add) ();此时add被一个小扩隔开了,此时add和*最近,他们先结合,所以int (*add) ()本质
是一个指针,这个整体再和小括号结合,就成了函数指针。本质是指针,所以这个是一个指向函数的指针。
(函数的特点是返回值为int,参数列表为空)
对*P++的理解,再联想~~~的更多相关文章
- javascript 原型及原型链的初步理解
最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...
- C#委托理解(个人观点)
前言: 根据百度百科字面意思是:把事情托付给别人或别的机构(办理/处理), 我们就按汉字意思来理解; 再罗嗦一点通俗一点就是:当某人发生什么事情后把处理这个事情的工作托付给别人或别的机构(办理/处理) ...
- 深入理解java回调机制
Callback的定义 一般在程序中执行回调函数是,是知道回调函数是预留给系统调用的,而且知道该函数的调用时机. 比如说android应用定义一个button对象,并给按钮添加一个监听事件," ...
- 对SLIP,PPP,PPPoE,EtherNet的理解。[zz]
经常看到PPP,PPPoE这些名词,当时也查了不少的资料,但是一直不太理解这是什么东西,干什么用的,今天静下心来,多看了点资料,有了一些初步理解,记录下来,以后有了新的理解再修改. 首先,SLIP ...
- 对于矩阵的理解-- by 孟岩老师
“如果不熟悉线性代数的概念,要去学习自然科学,现在看来就和文盲差不多.” --瑞典数学家Lars Garding名著<Encounter with Mathematics>. 1. 矩阵的 ...
- python学习-- 理解'*','*args','**','**kwargs'
刚开始学习Python的时候,对有关args,kwargs,和*的使用感到很困惑.相信对此感到疑惑的人也有很多.我打算通过这个帖子来排解这个疑惑(希望能减少疑惑). 让我们通过以下5步来理解: 1. ...
- 深刻理解JavaScript---闭包
JavaScript 闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中).换句话说,这些函数可以“记忆”它被创建时候的环境.——这句话其实有点难以理解.我觉 ...
- 对javascript中call()方法的理解
call ( thisObj [, arg1 [, arg2 [, [, argN] ] ] ]) call()方法:官方介绍是,调用一个对象的一个方法,以另一个对象替换当前对象. call()方法 ...
- HTTP状态码1XX深入理解
前段时间看了<御赐小仵作>,里面有很多细节很有心.看了一些评论都是:终于在剧里能够看到真正在搞事业.发了工资第一时间还钱的正常人了.我印象比较深的是王府才能吃上的葡萄.觉得非常合理.剧里说 ...
随机推荐
- Android--PullToRefreshListView的onRefreshComplete()不起作用的问题
今天用到了网上开源的下拉刷新组件PullToRefreshListView的第三方下拉刷新的ListView 我们发现 有时候我们当使用它的onRefreshComplete()方法是,我们下拉出来的 ...
- python自学——列表
#以下是我自己在联系列表中所编写的语句:names=["zangsan",'lisi','wangermazi','Xiaoliuzi','dabiaoge','牛erbiaodi ...
- 推荐:Asp.Net MVC 多语言(html+js共用一套资源文件)
此文主要是最近做多语言的工作的一个经验分享.文中的内容为参照多位大神的方案后,自己揉捏出来的一个新的方案,对于html和javascript部分的多语言的切换,共用一套资源文件.代码中主要是使用 IH ...
- Spring Boot session与cookie的使用
Session import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import ...
- [翻译] 提升树算法的介绍(Introduction to Boosted Trees)
[翻译] 提升树算法的介绍(Introduction to Boosted Trees) 1. 有监督学习的要素 XGBoost 适用于有监督学习问题.在此类问题中,我们使用多特征的训练数据集 \(x ...
- 8、Django的模型层(2)
第3节:多表操作 3.1 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作 ...
- (排序算法整理)NEFU 30/32
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/caihongshijie6/article/details/26165093 事实上, ...
- 怎样自适应ios设备大小
在编写移动端GIS程序的时候.常常要依据ios设备的大小来设置UI.曾经我在ios程序中,须要定义设备的值(如:宽度和高度),如: 可是假设是不同的设备.如iphone4.iphone5,甚至是 ...
- 难度并不NOIP的NOIP模拟赛
今天老师请了前几届的学长来讲课,可是讲课为什么要考试呢... 学长说难度是NOIP,于是我就naive的跟着参加了,然而T3难度并不友好,感觉确实不是很适合我们现在做......不过课本来也不是给我们 ...
- BZOJ2079:[POI2010]Guilds(乱搞)
Description Zy皇帝面临一个严峻的问题,两个互相抵触的贸易团体,YYD工会和FSR工会,他们在同一时间请求在王国各个城市开办自己的办事处.这里有n个城市,其中有一些以双向马路相连,这两个工 ...