指针对于每一个学过编程的人来说都是不陌生的,但同时也是很陌生的。指针是c的一个强有力武器,他可以直接操作内存,所以大大的提升了程序的运行速度,但是也正是因为这一特性,使得人们在使用指针是要格外的小心。我不详细说这些,我要简单说一下指针函数、函数指针、指针数组之类的绕口且比较难懂的方面。
想必很多C语言的初学者对指针都是一种保持敬畏的心态,虽然很强大,但是使用难度也不小。尤其在刚刚接触到指针函数、函数指针、指针数组、数组指针之类绕口的知识之后,更是十分头大。那我们应该怎么去理清这个中的关系,又如何去进行区分。
我看过的相当一部分书都是在那举一个例子然后分析一个,噼里啪啦都举例完了。看完了也就看完了。感觉还是一知半解。我说一下我现在总结的办法。
第一步:首先查找C语言符号的优先级顺序(这一个网上有很多,我就不列举了,大家百度一下都可以找到);
第二步:第二步开始前你要深深牢记一点,C语言符号是右结合性,知道了这一点我们就可以进行分析了,根据优先级和结合顺序,将一个某某指针一步步结合,从最简单形式写到题目中给出的形式。
第三步:这一步我一般是不看的,只是叫出这个鬼东西的名字,当你第二步完成第一个分解出的是名词,也就是其他的都是修饰他的
说了一堆文字描述性的东西,下面我举一个例子:
void (*p)()。括号优先级高,所以首先是*p,我们为了方便表示,姑且a=*p,然后就变成了这个样子a(),这样很明显,这是一个函数,所以,我写的这个东西就是函数指针,它是指向函数的指针。其他的依次类推。
void *p()。这个没有括号,根据又结合性,首先它是p(),这是一个函数,同样,姑且a=p(),然后接下来就变成了这样*a 。所以这是指针函数。
其他的也都一样的分析方法,如有不理解或者我说错的,欢迎在评论区留言