下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c语言的一些高级议题 指针是的灵魂,我们常常听到这样的说法,当我们初学c语言的时候,似乎觉得也没有什么,但是当你越来越深化的了解它,你就会发觉c语言的强大有时甚至超乎你的想象。c语言作为一种相对较为底层的语言,在某些方面有着不行替代的优势。因此,要学好c语言,要深化,要精通。 c语言之回调函数先来看下函数指针的的基础学问,函数指针,顾名思义,就是指向函数的指针,声明办法如下:int func(int); /函数原型int (*pfunc)(int) = /创建函数指针pfunc,并指向函数func这里的&操作符可有可无,由于函数名本身就是一个地址。回调函数是一个程序员不能显式调用的函数;通过将
2、回调函数的地址传给调用者从而实现调用。在我们想通过一个统一接口实现不同的内容时,用回调函数十分合适。例如:有如下用于不同设备的显示函数void a_show(); void b_show(); void c_show();void show(void (*ptr)();用法时我们就可以将函数作为参数show(a_show);再举一个经典的例子,实现在一个单链表中查找一个值。node *search_list(node *node,int const value)while(node!=null)if(node-value = value)break;node = node-link;retur
3、n node;这个函数只适用于值为整形的链表,由于value的值为int型,假如此时你需要在一个字符串链表中查找,需要编写另外的函数来实现。这时就用到了回调函数,使查找函数与类型无关,这样就能用于任何类型的值的链表。node *search_list(node *node,void const value,int (*compare)(void const * ,void const *)while(node!=null)if(compare(&node-value,value)=0)break;node = node-link;return node;int compare_ints(voi
4、d const *a, void const *b)if(*(int*)a = *(int *)b)return 0;elsereturn 1;我们在用法search_list函数时,你已经知道要查找数据的数据类型了。使用如下:desired_node = search_list(root, &desired_value,compare_ints);那假如你要在一个字符串链表中查找呢?首先你要在定义用于比较字符串一个函数:int compare_chars(void const *a, void const *b)if(*(char*)a = *(char *)b)return 0;elser
5、eturn 1;固然你不必这样来写,由于c语言函数库里面有这样的函数strcmp( const char *string1, const char *string2 );所以你就可以挺直用法下面的代码来实现在字符串链表中查找字符值的功能desired_node = search_list(root, &desired_value, strcmp);这样,可以不必修改search_list函数,而使得search_list函数的功能越发通用。c语言之面对对象我们常常说c语言是面对过程的语言,而c+、java是面对对象的,但是面对对象并不是c+、java的专利,c语言里面也有面对对象的思想,比如我
6、们常常用法的结构体。struct studentchar name256;int age;同学的姓名和年龄,就是同学自身的属性,和c+里面的成员变量是一样的概念,但是这个结构体里面并没有体现出办法的用法。在面对对象中有封装的概念,结构体中的成员我们不应当挺直拜访,而应当通过办法拜访,我们可以添加拜访结构体成员变量的办法。char* get_name(student * self);/猎取同学姓名void set_name(student * self, char* name);/设置同学姓名char* get_name(student * self)return self-name;void
7、set_name(student * self, char* name)strncpy(self-name, name, sizeof(self-name);此处省略age的设置和猎取功能。现在类的数据、办法都有了,下一步就是要用法类创建、初始化、析构、销毁对象,在c+中有new、delete操作符负责创建和销毁,用法c语言实现如下:student * student _create(void);/ 对象创建和初始化void student _destroy(student * self);/ 对象析构和销毁student * student _create(void)student * se
8、lf = malloc(sizeof(student);memset(self-name, 0x00, sizeof(self-name);self-age = 0;return self;void student _destroy(student * self)free(self);至此,我们就可以采纳面对对象的方式来编写代码了。student * student1= null;student1 = student _create();/创建对象set_name(student1, mary);/初始化student1的名字为maryset_age(student1, 20); /初始化student1的年龄为20get_name(studen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火电厂实习报告(15篇)
- 开学心得400字8篇
- 居民环保倡议书(10篇)
- 用工单位用工合同(31篇)
- 山西省太原市2024-2025学年九年级上学期期中测评物理试卷
- 河南省周口市西华县2024-2025学年八年级上学期期中地理试题
- 2024年11月八年级期中物理试卷
- 上海高考语文三年模拟真题(21-23年)知识点汇编-古诗词赏析
- 2024年医疗设备维修保养合同范本
- 快递行业劳动协议样式
- 四川省成都市九县区2024-2025学年高一上学期期中考试数学试题(含答案)
- 2024秋国开《四史通讲》期末大作业试题B答案(第1套)
- 2024年8月CCAA国家注册审核员《管理体系认证基础》考试题目含解析
- 2024新版(北京版)三年级英语上册单词带音标
- 户外广告安装施工方案
- 钠离子电池低成本硬碳负极关键技术开发-2024-10-技术资料
- 2025届广东省珠海市紫荆中学高二数学第一学期期末教学质量检测试题含解析
- 期中测试卷(1-3单元)(试题)2024-2025学年六年级上册数学苏教版
- 现代农业课件教学课件
- 2024年专业技术人员继续教育公需科目-职业幸福感的提升考试近5年真题集锦(频考类试题)带答案
- 农业无人机物流行业发展方向及匹配能力建设研究报告
评论
0/150
提交评论