文档章节

C函数指针

 学习吧
发布于 2015/10/12 20:20
字数 567
阅读 15
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

#函数指针 运行时确定调用哪个函数。 #include <stdio.h> void hello(void){ printf("Hello\n"); } void world(void){ printf("World\n"); } typedef int I; typedef void (*Func)(void); int main(void){ I i; scanf("%d",&i); void (*func0)(void); Func func1; if(i==0){ func0=hello; func1=hello; }else{ func0=world; func1=world; } func0(); func1(); return 0; } #形参函数指针 #include <stdio.h> void ArrForEach(int *arr,int len,void(func)(int)){ int i; for(i=0;i<len;++i){ func(&arr[i]); } } void PrintInt(int *i){ printf("%d,",*i); } void IncInt(int *i){ ++*i; } void DecInt(int *i){ --*i; } int main(void){ int arr[]={1,2,3,4,5,6,7,8,9,0}; ArrForEach(arr,10,PrintInt); printf("\n"); ArrForEach(arr,10,IncInt); ArrForEach(arr,10,PrintInt); printf("\n"); ArrForEach(arr,10,DecInt); ArrForEach(arr,10,PrintInt); printf("\n"); return 0; } 函数指针实现排序 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct AB{ int a; char b[16]; }AB; int ABCmp(const void *ab0Arg,const void *ab1Arg){ AB ab0=(AB)ab0Arg; AB ab1=(AB)ab1Arg; int result=ab0->a-ab1->a; if(result!=0) return result; return strcmp(ab0->b,ab1->b); } int main(void){ AB ab[]={ {1,"ab"}, {9,"df"}, {8,"ab"}, {1,"ab"}, {2,"ab"}, {2,"cd"}, }; int len=sizeof(ab)/sizeof(ab[0]); qsort(ab,len,sizeof(ab[0]),ABCmp); int i; for(i=0;i<len;++i){ printf("{%d,%s},",ab[i].a,ab[i].b); } printf("\n"); return 0; } #回调函数 #include <stdio.h> void Func(const char *str){ printf("数据:%s",str); } void DataMain(void (*func)(const char *str)){ for(;;){ char str[BUFSIZ]; fgets(str,sizeof(str),stdin); func(str); } } int main(void){ DataMain(Func); return 0; } #面向对象 #include <stdio.h> typedef struct Dog{ int age; void (*Sound)(struct Dog *dog); }Dog; void DogSound(Dog *dog){ printf("年龄:%d,汪汪。\n",dog->age); } void DogInit(Dog *dog,int age){ dog->age=age; dog->Sound=DogSound; } int main(void){ Dog dog; DogInit(&dog,10); dog.Sound(&dog); return 0; } #面向接口 Animal.h #ifndef ANIMAL_H #define ANIMAL_H typedef struct Animal{ void (*Run)(struct Animal *animal); void (*Sound)(struct Animal *animal); void (*Destroy)(struct Animal *animal); }Animal; Animal *NewDog(); Animal *NewCat(); #endif Animal.c #include "Animal.h" #include <stdio.h> #include <stdlib.h> typedef struct Dog{ Animal animal; }Dog; void DogRun(Animal *animal){ printf("跑的快\n"); }
void DogSound(Animal *animal){ printf("汪汪\n"); }
void DogDestroy(Animal *animal){ free(animal); }
Animal *NewDog(){ Dog *dog=malloc(sizeof(Dog)); dog->animal.Run=DogRun; dog->animal.Sound=DogSound; dog->animal.Destroy=DogDestroy; return &dog->animal; }
typedef struct Cat{ Animal animal; }Cat; void CatRun(Animal *animal){ printf("跑的慢,会爬树\n"); } void CatSound(Animal *animal){ printf("喵喵\n"); } void CatDestroy(Animal *animal){ free(animal); } Animal *NewCat(){ Cat *dog=malloc(sizeof(Cat)); dog->animal.Run=CatRun; dog->animal.Sound=CatSound; dog->animal.Destroy=CatDestroy; return &dog->animal; } Main.c #include "Animal.h" #include <stdio.h> #include <string.h> int main(void){ Animal *animal; char str[BUFSIZ]; fgets(str,sizeof(str),stdin); int len=strlen(str); if(len>0)str[len-1]=0; if(strcasecmp(str,"dog")==0){ animal=NewDog(); }else if(strcasecmp(str,"cat")==0){ animal=NewCat(); }else{ return -1; }
animal->Run(animal); animal->Sound(animal); animal->Destroy(animal); return 0; }

粉丝 3
博文 20
码字总数 6841
作品 0
海淀
程序员
私信 提问
加载中
请先登录后再评论。
【opencv】图形的绘制

1.矩形图像的绘制: 原函数:void cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8,int shift=0) img就是需要绘制的图像 pt1 and pt......

其实我是兔子
2014/10/08
1.2K
1
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
C/C++ 代码文档生成器--cldoc

cldoc 是一个使用 clang 实现的 C/C++ 代码文档生成器。 特点: 使用 clang 可靠解析大多数复杂的 C++ 项目 零配置 使用 markdown 做为文档格式 生成描述 API 的 XML 文档 使用简单格式用于文...

匿名
2013/02/14
1.4K
0
代码检索工具--CodeQuery

CodeQuery 是一个用来搜索 C/C++、Java 源码的索引工具。基于 cscope 和 ctags 构建,使用 cqmakedb 工具来生成 CodeQuery 数据库文件,然后通过 GUI 工具进行查看。 支持搜索:符号、函数、...

匿名
2013/02/25
2.7K
0
JQuery showDialog

使用方法: 先引入jquery库 版本不低于1.4.2 调用函数 showDialog(mode, msg, t, sd_width) 参数说明: 1, mode 模式 a. confirm [确认模式] b. info [显示信息] b. window [AJAX获取网页内容]...

匿名
2012/11/03
9.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

Java圈里,什么样的人,会越来越穷?

“我不想做 Java 了,想去做大数据!但我一个双非本科,能行么?“ 我还挺费解,为什么疫情之后,很多粉丝都想去做大数据, 但仔细想想原因太简单。 因为做大数据值钱、岗位还多。(是的,成...

倪升武
今天
2
0
Java 8 - Stream 集合操作快速上手

点击上方Java学习指南关注公众号 每天阅读Java干货文章 链接:www.jianshu.com/p/9fe8632d0bc2 目录 Stream 简介 为什么要使用 Stream 实例数据源 Filter Map FlatMap Reduce Collect Option...

xqnode
前天
19
0
工作流引擎的工作原理与功能

协同工作流引擎(Synchro flow)基于企业流程自动化基础的平台的产品同时也是企业流程再造的核心产品,并且提供以业务建模、流程设计、流程仿真、界面设计、业务整合、部署执行、系统管理、业...

osc_3nr0mda4
31分钟前
0
0
第三本 PDF !!!程序员必知核心基础知识

我们可以感觉出来,计算机专业的门槛正在逐渐增高,人与人之间的差距在逐渐拉大,今天和 一位阿里的大龄程序员聊天后发现,他也觉得自己底层知识很薄弱,正在找时间恶补,也在感叹时间管理的...

osc_htns3spg
32分钟前
9
0
【CSS】679- rem,em,px的区别和使用场景

作者:大前端小菜鸟 来源: cnblogs.com/hyns/p/12380944.html 作rem布局原理深度理解(以及em/vw/vh) 一、前言 我们h5项目终端适配采用的是淘宝那套《Flexible实现手淘H5页面的终端适配》方...

前端自习课
前天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部