第37课 指针阅读技巧分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第37课 指针阅读技巧分析相关的知识,希望对你有一定的参考价值。

1. 指针阅读技巧:右左法则

(1)从最里层的圆括号中未定义的标示符看起

(2)首先往右看,再往左看

(3)遇到圆括号方括号时可以确定部分类型,并调转方向

(4)重复2、3步骤,直到阅读结束

【编程实验】复杂指针的阅读

注意:当读出是数组时,须读出元素个数、元素类型

        当读出是函数是,须读出参数及类型,返回值类型

        当读出是指针是,须读出指针所指向的类型,有时也须读出指针的类型。

 

例题① int (*p)(int*, int (*f)(int*));

    A、读未标示符f,向右遇”)”括号,调转向左遇*,所以f是个指针,返回第2步,向右读右边的(int *),遇到“(”表示一个函数,说明f是个函数指针,指向一个函数,该函数参数为int*,返回值为int型。即f是个函数指针,至此,f指针读完……

    B、读p未标示符,向右遇”)”括号,调转向左遇*,所以p是个指针,返回第2步,向右读遇p指针右边的“(”括号,说明是个函数,该函数有2个参数,一个为int*,一个为f函数指针,返回值为int型,即p是个函数指针,指向两个参数,分别为int*和函数指针型,返回值为int型的函数指针。

 

例题② int (*p[5])(int*)

      A、读指针p,向右,说明p是数组,该数组有5个元素,每个元素的类型为指针类型,它们指向一个函数,该函数参数为int*,返回值为int型。

      B、综上:p为一个数组,有5个元素,每个元素是一个函数指针,它们指向一个参数为int*,返回值为int的函数。

 

例题③ int (*(*p)[5])(int*);

      A、读指针p,向右遇)括号,向左*,说明p是指针,部分确定类型回第2步,向右,说明p指针指向一个数组,该数组有5个元素,每个元素为指针,这个是个函数指针,指向参数为int*,返回值为int型的函数。

      B、综上:p为一个数组的指针,该数组有5个元素,每个元素为都是一个函数指针,函数参数为int*,返回值为int型。

 

例题④ int (*(*p)(int*))[5];

     A、首先p是个指针,指向函数,该函数参数为int*,返回值为指针。这个返回值指向一个数组,该数组有5个元素,每个元素为int型。

     B、综上:p是个函数指针。该函数:

              参数:int*

              返回值是个数组指针,指向5个int型元素的数组。

            

例题⑤ void (*func(void (*p)(void *)))(void *)

   A、func首先是个函数 :

          参数(红色部分)为p,p是个函数指针,指向是参数为void*,返回值为void的函数。

          返回值(蓝色部分,func前的星号),是一个指针,指向一个参数为void*,返回值为void的函数。即返回值是一个函数指针。

   B、综上,func是个函数,参数是函数指针p,返回值也是函数指针。

2. 小结

(1)右左法则总结于编译器对指针变量的解析过程

(2)指针阅读练习的意义在于理解指针的组合定义

(3)可通过typedef简化复杂指针的定义

以上是关于第37课 指针阅读技巧分析的主要内容,如果未能解决你的问题,请参考以下文章

python中令人蛋疼的地方及一些技巧

mybatis框架中parameterType为Map的用法 和 数据库语句多层嵌套

如果有多个循环,在最内层里用break语句是是跳出最内层循环还是跳出所有循环

利用正则表达式来实现求一个数学表达式的和

js事件

Echarts作图之饼状图联动