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 的函数。返回值是一个指针,指向一个参数为 void*,返回值为 void 的函数。即返回值是一个函数指针。

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

参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html

C语言学习笔记--指针阅读技巧的更多相关文章

  1. c语言学习笔记 - 指针和字符串

    前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...

  2. c语言学习笔记 - 指针和数组

    结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...

  3. c语言学习笔记.指针.

    指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...

  4. C语言学习笔记--指针和数组的关系

    1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...

  5. C语言学习笔记--指针概念

    指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...

  6. C语言学习笔记--指针与字符串

    字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...

  7. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  8. 《软件调试的艺术》学习笔记——GDB使用技巧摘要

    <软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...

  9. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

随机推荐

  1. Spring 入门base

    提起Spring,就会想到企业级框架这个词 企业级系统: 1.大规模:用户数量多,数据规模庞大,数据众多 2.性能和安全性要求更高 3.业务复杂 4.灵活应变 我觉得先了解一下Spring的地位和他的 ...

  2. Windows 安装Mysql8.0 绿色包

    〇.准备: MySQL8.0 Windows zip包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 环 ...

  3. tensorflow笔记:多层CNN代码分析

    tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...

  4. java常见设计模式

    工厂模式 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 多个工厂模式,编写多个创建工厂的方法即可. 静态工厂模式,在多个工厂模式的基础上把Factory种方法的返回值标明 ...

  5. UML类图(二)----------类与类之间的关系之关联(聚合与组合)

    类与类之间的关系: 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式.       1. 关联关系 关联(Association)关系是类与类之 ...

  6. 解决:WebDriverException: 'chromedriver' executable needs to be in PATH

    打算学习用selenium + phantomJS爬取淘女郎页面照片. 一. 先安装lxml模块 python默认的解析器是html.parser,但lxml解析器更加强大,速度更快 1. 执行 pi ...

  7. CodeForces - 633H :Fibonacci-ish II(正解:莫对+线段树)

    Yash is finally tired of computing the length of the longest Fibonacci-ish sequence. He now plays ar ...

  8. [TopCoder12727]FoxAndCity

    vjudge 题意 你有一张\(n\)点的无向图,每个点有一个点权\(w_i\).图中原来存在一些边,你可以任意给这张图加上一些边. 记点\(i\)到点\(1\)的距离为\(d_i\),你需要最小化\ ...

  9. 微信小程序 写音乐播放器 slider组件 将value设置为0 真机测试滑块不能回到起点

    最近在用微信小程序写一个音频播放页面,做时间进度的时候用到了slider插件,但是在自然播放完成,或者上/下切换的时候,将slider的value属性值设为0,开发工具上滑块会回到起点,有效.但是真机 ...

  10. 谈谈Linux内核驱动的coding style

    最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...