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

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

前3周博客汇总

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/200 2/2 20/20 学习了Linux常用命令
第二周 79/279 1/3 30/50 了解vim,gcc,gdb基本操作
第三周 182/461 1/4 25/75 更深层次了解信息处理
第四周 36/497 2/6 3/78 第二章知识简单的运用
第五周 194/691 1/7 28/106 汇编知识与了解逆向
第六周 520/1211 1/8 27/133 Y86处理器,了解ISA抽象
第七周 85/1296 1/9 21/153 理解了局部性原理
第八周 0/1296 2/11 20/173 期中总结
第九周 234/1530 2/13 30/203 了解Linux是怎样操作文件
第十周 453/1983 2/15 20/223 系统调用深入实践
第十一周 1097/3080 3/18 26/249 理解进程和并发,了解异常及其种类
第十二周 0/3080 3/18 20/269 复习巩固加深

参考资料

原文地址:https://www.cnblogs.com/20145221GQ/p/6131844.html