C语言学习笔记--指针阅读技巧
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语言学习笔记--指针阅读技巧的更多相关文章
- c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...
- c语言学习笔记 - 指针和数组
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...
- c语言学习笔记.指针.
指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- C语言学习笔记--指针概念
指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...
- C语言学习笔记--指针与字符串
字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
随机推荐
- Spring 入门base
提起Spring,就会想到企业级框架这个词 企业级系统: 1.大规模:用户数量多,数据规模庞大,数据众多 2.性能和安全性要求更高 3.业务复杂 4.灵活应变 我觉得先了解一下Spring的地位和他的 ...
- Windows 安装Mysql8.0 绿色包
〇.准备: MySQL8.0 Windows zip包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 环 ...
- tensorflow笔记:多层CNN代码分析
tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...
- java常见设计模式
工厂模式 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 多个工厂模式,编写多个创建工厂的方法即可. 静态工厂模式,在多个工厂模式的基础上把Factory种方法的返回值标明 ...
- UML类图(二)----------类与类之间的关系之关联(聚合与组合)
类与类之间的关系: 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式. 1. 关联关系 关联(Association)关系是类与类之 ...
- 解决:WebDriverException: 'chromedriver' executable needs to be in PATH
打算学习用selenium + phantomJS爬取淘女郎页面照片. 一. 先安装lxml模块 python默认的解析器是html.parser,但lxml解析器更加强大,速度更快 1. 执行 pi ...
- CodeForces - 633H :Fibonacci-ish II(正解:莫对+线段树)
Yash is finally tired of computing the length of the longest Fibonacci-ish sequence. He now plays ar ...
- [TopCoder12727]FoxAndCity
vjudge 题意 你有一张\(n\)点的无向图,每个点有一个点权\(w_i\).图中原来存在一些边,你可以任意给这张图加上一些边. 记点\(i\)到点\(1\)的距离为\(d_i\),你需要最小化\ ...
- 微信小程序 写音乐播放器 slider组件 将value设置为0 真机测试滑块不能回到起点
最近在用微信小程序写一个音频播放页面,做时间进度的时候用到了slider插件,但是在自然播放完成,或者上/下切换的时候,将slider的value属性值设为0,开发工具上滑块会回到起点,有效.但是真机 ...
- 谈谈Linux内核驱动的coding style
最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...