易截截图软件、单文件、免安装、纯绿色、仅160KB

关于C中的回调函数的应用

在使用回调函数中,往往会设置一个指向函数的指针,那为什么不直接将函数名作为参数传递呢?
原因是:在C语言中函数本身不是变量,但是可以定义指向函数的指针。这种类型的指针可以被赋值、存放在数组中、传递给函数以及作为函数的返回值,
下面是我在网上找到的一个关于回调函数的小例子(对原文的例子有所修改)
原文链接:http://hi.baidu.com/helloweenpad/blog/item/d96d13fb4b2276809f514607.html/cmtid/feb4928edf8883e5f11f3636
#include<stdio.h>
typedef int (*CallBackFun)(char *p);
/*该语句定义了类型CallBackFun是“一个指向函数的指针,该函数具有1个char *类型的参数,返回值的类型为int.”*/
int Afun(char *p) {    // 方法 Afun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
    printf("Afun 回调打印出字符%s!\n", p);
    return 0;
}
int Cfun(char *p) {    // 方法 Bfun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
    printf("Cfun 回调打印:%s, Nice to meet you!\n", p);
    return 0;
}
int call(CallBackFun pCallBack, char *p) { // 执行回调函数,方式一:通过命名方式
    printf("call 直接打印出字符%s!\n", p);
    pCallBack(p);
    return 0;
}
int call2(char *p, int (*ptr)(char *p)) { // 执行回调函数,方式二:直接通过方法指针
    printf("==============\n", p);
    (*ptr)(p);
}
int call3(char *p, CallBackFun pCallBack){ // 执行回调函数,方式一:通过命名方式
    printf("--------------\n", p);
    pCallBack(p);
}
int main() { 
 
    char *p = "hello";
    call(Afun, p);
    call(Cfun, p);
    call2(p, Afun);
    call2(p, Cfun);
    call3(p, Afun);
    call3(p, Cfun);
    return 0;
}
在原文中,作者将int call2(char *p, int (*ptr)(char *p))换成了i


相关文档:

又是3只C。。。= =

1.写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
#include<stdio.h>
int gcd(int,int);
int lcm(int,int);
int gcd(int m,int n)
{
if(m%n==0)
return n;
else
return gcd(n,m%n);
}
int lcm(int m,int n)
{
return m*n/(gc ......

【转】C代码优化方案


1、选择合适的算法和数据结构
选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。
在许多 ......

彻底搞定C指针

 
转帖自http://teren.itpub.net/post/15914/189516写的非常好,同时对作者打破砂锅问到底的精神彻底折服
《彻底搞定C指针》第一篇 变量的内存实质
要理解C指针,我认为一定要理解C中“变量”的存储实质,所以我就从“变量”这个东西开始讲起吧!
先来理解理解内存空间吧!请看下图:
内存地 ......

读《C和指针》笔记摘要【5】

2010-04-09
第十四章   预处理器
1、#define 替换
在程序中扩展#define定义符号和宏时,需要涉及几个步骤;
①、在调用宏时,首先对参数进行检查,看看是否包含了任何由#define定义的符号,如果是,它们首先被替换;
②、替换文件随后被插入到程序中原来文件的位置,对于宏,参数名被他们的值替代;
③、最 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号