易截截图软件、单文件、免安装、纯绿色、仅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


相关文档:

GCC 编译c程序的方法及过程解析

GCC 编译c程序的方法及过程解析 
Justin.zp.Yang 2010.04.10
        目前 Linux 下最常用的 C 语言编译器是 GCC ( GNU Compiler Collection ),它是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C 、 C++ 和 Object C 等语言编写的程序。 GCC 不仅功能非常强大,结构 ......

《C程序设计第三版》课后作业【第一章】

1.1请根据自己的认识,写出C语言的主要特点。
1.2C语言的主要用途是什么?它和其他高级语言有什么异同?
1.3写出一个C程序的构成。
1.4C语言以函数为程序的基本单位,有什么好处?
1.5请参照本章例题,编写一个C程序,输出一下信息:
×××××××××××& ......

用C socket http发送这段请求报文

HTTP分为请求行,请求头部以及请求内容
那个长度数字值就是请求内容的长度(字节为单位)
给一段例子你就基本明白了:
onst CString getString(int i)
{
    CString s;
    s.Format(_T("%d"), i);
    return s;
}
////////////////////////////////
CS ......

C环境将变量定义到RAM绝对地址之上


//来源不详
1. 绝对宏:
在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具体使用可看一看absacc.h便知,例如:
rval=CBYTE[0x0002];指向程序存贮器的0002h地址
rval=XWORD[0x0002];指向外RAM的0002h地址
2 ......

Fortran & C 混编

C 调用 Fortran
c2ffn.f
      SUBROUTINE NAMEAGE(NAME, NLEN, AGE, TEMP)
      CHARACTER*(*) NAME
      INTEGER NLEN,AGE
      REAL TEMP
C
      WRITE(6,1000) NAME(1:NLEN),AGE,TEMP ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号