- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c函数接口
C语言本质——07--函数接口? (2010-10-21 20:14:19)javascript:;转载▼标签:?/?c=blogq=%D4%D3%CC%B8by=tag杂谈分类:?/s/articlelist_1267589791_3_1.htmlLinuxC编程传入参数与传出参数??如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的src参数是传入参数,dest参数是传出参数。有些函数的指针参数同时担当了这两种角色,如select(2)的fd_set *参数,既是传入参数又是传出参数,这称为Value-result参数。1.传入参数示例:void func(const unit_t *p);2.传出参数示例:void func(unit_t *p);3.Value-result参数示例:void func(unit_t *p);?传出参数举例:两层指针的参数??两层指针也是指针,同样可以表示传入参数、传出参数或者Value-result参数,只不过该参数所指的内存空间应该解释成一个指针变量。#ifndef REDIRECT_PTR_H#define REDIRECT_PTR_Hextern void get_a_day(const char **);#endif#include redirect_ptr.hstatic const char *msg[] = {Sunday, Monday, Tuesday, Wednesday,??????Thursday, Friday, Saturday};void get_a_day(const char **pp){??static int i = 0;??*pp = msg[i%7];??i++;}#include stdio.h#include redirect_ptr.hint main(void){??const char *firstday = NULL;??const char *secondday = NULL;??get_a_day(firstday);??get_a_day(secondday);??printf(%s\t%s\n, firstday, secondday);??return 0;}??两层指针作为传出参数还有一种特别的用法,可以在函数中分配内存,调用者通过传出参数取得指向该内存的指针。?通过参数分配内存示例:void alloc_unit(unit_t **pp);?void free_unit(unit_t *p);返回值是指针??如果返回值传出的是指针,分为两种情况:第一种是传出指向静态内存或已分配的动态内存的指针,例如localtime(3)和inet_ntoa(3),第二种是在函数中动态分配内存并传出指向这块内存的指针,例如malloc(3),这种情况通常还要实现一个释放内存的函数。其实质就相当于一个指针函数。1.返回指向已分配内存的指针示例:unit_t *func(void);2.动态分配内存并返回指针示例:unit_t *alloc_unit(void);??void free_unit(unit_t *p);回调函数??如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(Callback Function)。实质即是函数指针。?回调函数示例:void func(void (*f)(void *), void *p);例1:实现了一个repeat_three_times函数,可以把调用者传来的任何回调函数连续执行三次。#ifndef PARA_CALLBACK_H#define PARA_CALLBACK_Htypedef void (*callback_t)(void *);extern void repeat_three_times(callback_t, void *);#endif#include para_callback.hvoid repeat_three_times(callback_t f, void *para){??f(para);??f(para);??f(para);}#include stdio.h#include para_callback.hvoid say_hello(void *str){??printf(Hello %s\n, (const char *)str);}void count_numbers(void *num){??int i;??for(i=1; i=(int)num; i++)????printf(%d , i);??
您可能关注的文档
- 2016版《3年高考2年模拟课标化学》题组练习第12讲氧硫及其化合物2年模拟.docx
- 2016高考化学二轮复习习题专题17氧硫及其化合物和环境保护Word版含解析.doc
- 2016惠安县初中学业质量检测2(定稿).doc
- 2016河工大函授工程力学.doc
- 2017版高考化学一轮复习真题专训第四章非金属及其化合物基础课时3硫及其重要化合物.doc
- 2016高三地理三轮总复习热点总结(王玉娟).doc
- 2017版高考化学一轮复习课时跟踪训练第四章非金属及其化合物基础课时3硫及其重要化合物.doc
- 2016高考三角函数立体几何数列荟萃.docx
- 2017生物一轮对点训练1-4生物组织中有机物的鉴定和观察bWord版含解析.doc
- 2017届湖南省雅礼中学高三上学期月考(二)化学试题.doc
- 8 黄山奇石(第二课时)课件(共22张PPT).pptx
- 22《纸船和风筝》教学课件(共31张PPT).pptx
- 17 松鼠 课件(共23张PPT).pptx
- 23《海底世界》课件(共28张PPT).pptx
- 21《大自然的声音》课件(共18张PPT).pptx
- 第12课《词四首——江城子 密州出猎》课件 2025—2026学年统编版语文九年级下册.pptx
- 第2课《济南的冬天》课件(共42张PPT) 2024—2025学年统编版语文七年级上册.pptx
- 17 跳水 第二课时 课件(共18张PPT).pptx
- 第六单元课外古诗词诵读《过松源晨炊漆公、约客》课件 统编版语文七年级下册.pptx
- 统编版六年级语文上册 22《文言文二则》课件(共27张PPT).pptx
原创力文档


文档评论(0)