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的DI初步

    DI:依赖注入 第一个DEMO:域属性注入 java类:(Car类和Stu类,学生有一辆小汽车) package cn.dawn.day02di; /** * Created by Dawn on 2 ...

  2. numpy加权平均

    import numpy as np a = np.arange(15).reshape(3,5) a array([[ 0, 1, 2, 3, 4],    [ 5, 6, 7, 8, 9],   ...

  3. GreenDao 多表事务操作

    场景:Android APP多表操作事务管理 使用Android自带的sql操作类操作的时候需要手动处理事务,使用GreenDao的时候不用管了,啥都处理好了.但是,如果是多表操作的话,怎么统一管理事 ...

  4. Hibernate中使用Spring Data JPA

    一.配置文件的方式 1.pom.xml中引入相关依赖 <properties> <project.build.sourceEncoding>UTF-8</project. ...

  5. $.ajax应用之请求头headers

    昨天项目中,由于要请求token验证,后台给出的方案是采用请求头返回token数据,给出的API文档是这样的 由于之前一直都是采用请求体发送请求,服务器在应答体李返回数据.和这个不一样: 采用jq的$ ...

  6. php get_magic_quotes_gpc()

    magic_quotes_gpc函数在php中的作用是判断解析用户输入的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序异常,特别是数据库语句因为 ...

  7. ControlTemplate,ItemsPanelTemplate,DataTemplate(wpf)

    在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和ItemsPanelTemplate是控件模板, ...

  8. MySQL管理

    http://www.yiibai.com/mysql/administration.html 在本节中,您将学习有关MySQL管理教程,包括MySQL服务器启动和关闭,MySQL服务器安全性,MyS ...

  9. ContextMenuStrip 动态添加多级子菜单

    1.首先要实例化几个ToolStripItem(要为某一父菜单添加几个子菜单就实例化几个):方法如下: /*添加子菜单*/ ToolStripItem ts_1 = new ToolStripMenu ...

  10. jquery ajax中使用jsonp的限制(转)

    http://www.cnblogs.com/dudu/archive/2012/12/04/jquery_ajax_jsonp.html jsonp 解决的是跨域 ajax 调用的问题.为什么要跨域 ...