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
- func右边是一个
int (*(*func)[5])(int *p);
- func被一对圆括号包围,左边又有一个
*
,那么func是一个指针,跳出括号,右边是一个[]运算符号,说明func是一个指向数组的指针,现在往左看,左边有一个*
号,说明这个数组的元素是指针,再跳出括号,向右看,右边又有一个括号,说明这个数组的元素是指向函数的指针。 - 总结一下就是:func是一个指向数组的指针,这个数组的元素是函数指针,这些指针具有
int *
形参,返回值为int类型的函数
- func被一对圆括号包围,左边又有一个
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 | 复习巩固加深 |