您的位置:首页 > 其它

20145221 《信息安全系统设计基础》第12周学习总结

2016-12-04 20:58 253 查看

20145221 《信息安全系统设计基础》第12周学习总结

前3周博客汇总

20145221 《信息安全系统设计基础》第9周学习总结

20145221 《信息安全系统设计基础》第10周学习总结

20145221 《信息安全系统设计基础》第11周学习总结

C语言相关概念界定

指针数组

本质:数组

定义:数组元素全为指针的数组称为指针数组。

举例:
int *p[10]


数组指针

本质:指针

定义:数组名的指针,即数组首元素地址的指针。即是指向数组的指针。

举例:
int (*p)[10]


指针函数

本质:函数

定义:是一个函数,只不过这个函数的返回值是一个地址值。

举例:
int *fun(int)


函数指针

本质:指针

定义:函数指针是指向函数的指针变量。

举例:
int (*fun)(int)


声明方法:

int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */


注意:赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

另外:指向函数的指针变量没有
++
--
运算

判断识别:左右规则

首先从未定义的标识符开始阅读,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

小试牛刀

int (*func) (int *p);


首先找到未定义标识符,就是
func
,它的外面有一对圆括号,而且左边是一个
*
,这说明func是一个指针。然后跳出括号,看右边,也是一个括号,这说明
(*func)
是一个函数,而
func
是一个指向这类函数的指针,也就是一个函数指针。这类函数具有
int*
类型的参数,返回值类型是
int


int (*func)(int *p, int (*f)(int *));


func
被一对括号包含,且左边有一个
*
号,说明
func
是一个指针,然后跳出这个圆括号,先看右边,也是一个圆括号,说明
func
是一个函数指针。这类函数具有
int *
int (*)(int *)
这样的形参,返回值是
int
。对于
int (*f)(int *)
的形参,分析方法跟
func
是一致的。

int (*func[5])(int *p);


func右边是一个
[]
运算符,说明func是一个具有5个元素的数组,func的左边有一个
*
,说明func的元素是指针,要注意这里的
*
不是修饰fun的,而是修饰
func[5]
的,原因是[]运算符的优先级比
*
高,func先跟
[]
结合,因此
*
修饰的是
func[5]
.跳出这个括号,看右边,也是一对圆括号,说明
func
数组的元素是函数类型的指针,它指向的函数具有
int*
类型的形参,返回值类型是
int


int (*(*func)[5])(int *p);


func被一对圆括号包围,左边又有一个
*
,那么func是一个指针,跳出括号,右边是一个[]运算符号,说明func是一个指向数组的指针,现在往左看,左边有一个
*
号,说明这个数组的元素是指针,再跳出括号,向右看,右边又有一个括号,说明这个数组的元素是指向函数的指针。

总结一下就是:func是一个指向数组的指针,这个数组的元素是函数指针,这些指针具有
int *
形参,返回值为int类型的函数

int (*(*func)(int *p))[5];


func是一个函数指针,这类函数具有int *类型的形参,返回值是指向数组的指针,所指向的是具有5个int类型元素的数组。

其他(感悟、思考等,可选)

这周是对前几周的总结,发现了还是有很多地方学的很模糊,但这次对于指针数组、数组指针、指针函数和函数指针这几个概念还是基本弄清楚了。虽然我们可能不会亲自编写到如此复杂的声明,但是我个人觉得还是有必要掌握的。这对我们阅读程序以及相关帮助手册都有很大帮助。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20学习了Linux常用命令
第二周79/2791/330/50了解vim,gcc,gdb基本操作
第三周182/4611/425/75更深层次了解信息处理
第四周36/4972/63/78第二章知识简单的运用
第五周194/6911/728/106汇编知识与了解逆向
第六周520/12111/827/133Y86处理器,了解ISA抽象
第七周85/12961/921/153理解了局部性原理
第八周0/12962/1120/173期中总结
第九周234/15302/1330/203了解Linux是怎样操作文件
第十周453/19832/1520/223系统调用深入实践
第十一周1097/30803/1826/249理解进程和并发,了解异常及其种类
第十二周0/30803/1820/269复习巩固加深

参考资料

《深入理解计算机系统》

2016-2017-1 《信息安全系统设计基础》教学进程

深入学习C语言中的函数指针和左右法则
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: