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/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 | 复习巩固加深 |
参考资料
《深入理解计算机系统》2016-2017-1 《信息安全系统设计基础》教学进程
深入学习C语言中的函数指针和左右法则
相关文章推荐
- 20145221 《信息安全系统设计基础》第3周学习总结
- 20145221 《信息安全系统设计基础》第9周学习总结
- 20145229《信息安全系统设计基础》第12周学习总结
- 20145239 《信息安全系统设计基础》第12周学习总结
- 20145212 《信息安全系统设计基础》第12周学习总结
- 20145221 《信息安全系统设计基础》第4周学习总结
- 20145330 《信息安全系统设计基础》第12周学习总结
- 20145231 《信息安全系统设计基础》第12周学习总结
- 20145326蔡馨熠《信息安全系统设计基础》第12周学习总结
- 20145205 《信息安全系统设计基础》第12周学习总结
- 20145315 《信息安全系统设计基础》第12周学习总结
- 20145221 《信息安全系统设计基础》第6周学习总结
- 20145308 《信息安全系统设计基础》第12周学习总结
- 20145221 《信息安全系统设计基础》第5周学习总结
- 20145221 《信息安全系统设计基础》第1周学习总结
- 20145221 《信息安全系统设计基础》第7周学习总结
- 20145202 《信息安全系统设计基础》第12周学习总结(1)
- 20145313张雪纯《信息安全系统设计基础》第12周学习总结
- 20145201《信息安全系统设计基础》第12周学习总结
- 20145236《信息安全系统设计基础》第12周学习总结