Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»Øµ÷Ö¸Õë»Øµ÷º¯ÊýµÄʹÓã¨CÓïÑÔ£©
 
  1894  次浏览      27
 2019-7-15
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎĽ«»á¼òµ¥½éÉÜÁËÈçºÎ¶¨Ò庯ÊýÖ¸ÕëÒÔ¼°º¯ÊýÖ¸ÕëµÄÓ¦ÓÃÀ´ÊµÏֻص÷£¬Ï£Íû¶ÔÄúµÄѧϰÄÜÓÐËù°ïÖú¡£

»Øµ÷º¯ÊýµÄʹÓÃ

»Øµ÷º¯ÊýÔÚCÓïÑÔÖÐÊÇͨ¹ýº¯ÊýÖ¸ÕëÀ´ÊµÏÖµÄ,ͨ¹ý½«»Øµ÷º¯ÊýµÄµØÖ·´«¸ø±»µ÷º¯Êý´Ó¶øÊµÏֻص÷¡£Òò´Ë£¬ÒªÊµÏֻص÷£¬±ØÐëÊ×Ïȶ¨Ò庯ÊýÖ¸Õë¡£

1. »Øµ÷Ö¸Õë

¸ÅÄָÕëÊÇÒ»¸ö±äÁ¿£¬ÊÇÓÃÀ´Ö¸ÏòÄÚ´æµØÖ·µÄ¡£Ò»¸ö³ÌÐòÔËÐÐʱ£¬ËùÓкÍÔËÐÐÏà¹ØµÄÎï¼þ¶¼ÊÇÐèÒª¼ÓÔØµ½ÄÚ´æÖУ¬Õâ¾Í¾ö¶¨Á˳ÌÐòÔËÐÐʱµÄÈκÎÎï¼þ¶¼¿ÉÒÔÓÃÖ¸ÕëÀ´Ö¸ÏòËü¡£º¯ÊýÊÇ´æ·ÅÔÚÄÚ´æ´úÂëÇøÓòÄڵģ¬ËüÃÇͬÑùÓеØÖ·£¬Òò´ËͬÑù¿ÉÒÔÓÃÖ¸ÕëÀ´´æÈ¡º¯Êý£¬°ÑÕâÖÖÖ¸Ïòº¯ÊýÈë¿ÚµØÖ·µÄÖ¸Õë³ÆÎªº¯ÊýÖ¸Õë¡£

1. ²ÉÓú¯Êýµ÷ÓõÄÒ»°ãÐÎʽ

Ê×ÏÈ¿´Ò»¸öhello world!µÄ³ÌÐò£º

int application_start( void )
{
OSStatus err = kNoErr;
char *s ="hello world !";
app_log(" s:%s",s);
return err;
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 90] s:hello world !

Èç¹û²ÉÓú¯Êýµ÷ÓõÄÐÎʽÀ´ÊµÏÖ£º

//ÉùÃ÷
void Islog( char *s);
int application_start( void )
{
OSStatus err = kNoErr;
Islog("hello world !");
return err;
}
void Islog( char *s){
app_log(" s:%s",s);
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 90] s:hello world !

2. ¼òµ¥µÄº¯ÊýÖ¸ÕëµÄÓ¦ÓÃ

ÐÎʽ1£º·µ»ØÀàÐÍ(*º¯ÊýÃû)(²ÎÊý±í)

°ÑÉÏÃæµÄÀý×ӸijÉʹÓüòµ¥µÄº¯ÊýÖ¸ÕëµÄд·¨£º

//ÉùÃ÷
void Islog( char *s);
int application_start( void )
{
OSStatus err = kNoErr;
void (*fp)(char *s);//ÉùÃ÷Ò»¸öº¯ÊýÖ¸Õë(fp)
fp = Islog;//½«IslogµÄº¯ÊýÈë¿ÚµØÖ·¸¶¸øfp
fp("hello world !");//º¯ÊýÖ¸ÕëfpʵÏÖº¯Êýµ÷ÓÃ
return err;
}
void Islog( char *s){
app_log(" s:%s",s);
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 90] s:hello world !

ÓÉÉÏÖªµÀ£ºº¯ÊýÖ¸Õ뺯ÊýµÄÉùÃ÷Ö®¼äÎ¨Ò»Çø±ð¾ÍÊÇ£ºÓÃÖ¸ÕëÃû(*fp)´úÌæÁ˺¯ÊýÃûIslog£¬ÕâÑùÉùÃ÷ÁËÒ»¸öº¯ÊýÖ¸Õ룬Ȼºó½øÐи³Öµfp= Islog ¾Í¿ÉÒÔ½øÐÐÖ¸Õ뺯ÊýµÄµ÷ÓÃÁË£¬ÉùÃ÷º¯ÊýÖ¸Õëʱ£¬Ö»Òª·µ»ØÖµÀàÐÍ¡¢²ÎÊý¸öÊý¡¢²ÎÊýÀàÐ͵ȱ£³ÖÒ»Ö£¬¾Í¿ÉÒÔÉùÃ÷Ò»¸öº¯ÊýÖ¸ÕëÁË¡£×¢Ò⣬º¯ÊýÖ¸Õë±ØÐëÀ¨ºÅÀ¨ÆðÀ´ void (*fp)(char *s)¡£

3. ʹÓÃtypedef¸ü¼òµ¥

ʵ¼ÊÖУ¬ÎªÁË·½±ã£¬Í¨³£Ê¹Óú궨ÒåµÄ·½Ê½ÉùÃ÷º¯ÊýÖ¸Õë¡£

ÐÎʽ2£º·µ»ØÀàÐÍ(*ÐÂÀàÐÍ)(²ÎÊý±í)

typedef void (*intFunc)(int);

´Ëºê¶¨ÒåµÄÒâ˼ÊÇÒª¶¨ÒåµÄÀàÐÍÊÇvoid (*)(int)£¬¼´²ÎÊýÒ»¸öint,ʲôҲ²»·µ»ØµÄº¯ÊýÖ¸Õ룬¶¨ÒåµÄ±ðÃûÊÇintFunc¡£

²ÉÓú궨ÒåµÄ·½Ê½ÉùÃ÷º¯ÊýÖ¸Õ뽫ÉÏÉÏÃæµÄ´úÂë¸Äд:

//ºê¶¨Òå
typedef void(*FP)(char *s);
//ÉùÃ÷
void Islog( char *s);
int application_start( void )
{
OSStatus err = kNoErr;
FP fp; //ͨ³£Ê¹ÓúêFPÀ´ÉùÃ÷Ò»¸öº¯ÊýÖ¸Õëfp
fp = Islog;//½«IslogµÄº¯ÊýÈë¿ÚµØÖ·¸¶¸øfp
fp("hello world !");//º¯ÊýÖ¸ÕëfpʵÏÖº¯Êýµ÷ÓÃ
return err;
}
void Islog( char *s){
app_log(" s:%s",s);
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 90] s:hello world !

4. º¯ÊýÖ¸ÕëÊý×é

ÏÂÃæµÄÊÇÖ¸Õ뺯ÊýÊý×éµÄÀý×Ó£º

Àý×Ó1£º

//ºê¶¨Òå
typedef void(*FP)(char *s);
//ÉùÃ÷
void Islog1( char *s);
void Islog2( char *s);
void Islog3( char *s);
int application_start( void )
{
OSStatus err = kNoErr;
//void* Islog[] = {Islog1,Islog2,Islog3};//¶¨ÒåÁËÖ¸ÕëÊý×飬ÕâÀïaÊÇÒ»¸öÆÕָͨÕë
//Islog3[0] ("hello world !");//±àÒë´íÎó,Ö¸ÕëÊý×é²»ÄÜÓÃϱêµÄ·½Ê½À´µ÷Óú¯Êý
FP Islog[] = {Islog1,Islog2,Islog3};//¶¨ÒåÒ»¸öº¯ÊýÖ¸ÕëµÄÊý×é,ÕâÀïµÄfÊÇÒ»¸öº¯ÊýÖ¸Õë
Islog[0] ("hello world!");
Islog[1] ("hello world!");
Islog[2] ("hello world!");
return err;
}
void Islog1( char *s){app_log(" s:%s",s);}
void Islog2( char *s){app_log(" s:%s",s);}
void Islog3( char *s){app_log(" s:%s",s);}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 101] s:hello world!
[4][TCP: main.c: 103] s:hello world!
[7][TCP: main.c: 105] s:hello world!

Àý×Ó2£º

//ºê¶¨Òå
typedef void(*FP)( char *s,int count);
//ÉùÃ÷
void Islog1( char *s,int count);
void Islog2( char *s,int count);
void Islog3( char *s,int count);
int application_start( void )
{
OSStatus err = kNoErr;
//void* Islog[] = {Islog1,Islog2,Islog3};//¶¨ÒåÁËÖ¸ÕëÊý×飬ÕâÀïaÊÇÒ»¸öÆÕָͨÕë
//Islog3[0] ("hello world !");//±àÒë´íÎó,Ö¸ÕëÊý×é²»ÄÜÓÃϱêµÄ·½Ê½À´µ÷Óú¯Êý
FP Islog[] = {Islog1,Islog2,Islog3};//¶¨ÒåÒ»¸öº¯ÊýÖ¸ÕëµÄÊý×é,ÕâÀïµÄfÊÇÒ»¸öº¯ÊýÖ¸Õë
Islog[0] ("hello world!",1);
Islog[1] ("hello world!",2);
Islog[2] ("hello world!",3);
return err;
}
void Islog1( char *s,int count){app_log(" s:%s and count:%d",s,count);}
void Islog2( char *s,int count){app_log(" s:%s and count:%d",s,count);}
void Islog3( char *s,int count){app_log(" s:%s and count:%d",s,count);}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 101] s:hello world! and count:1
[5][TCP: main.c: 102] s:hello world! and count:2
[9][TCP: main.c: 103] s:hello world! and count:3

2. »Øµ÷º¯Êý

¸ÅÄ»Øµ÷º¯Êý£¬¹ËÃû˼Ò壬¾ÍÊÇʹÓÃÕß×Ô¼º¶¨ÒåÒ»¸öº¯Êý£¬Ê¹ÓÃÕß×Ô¼ºÊµÏÖÕâ¸öº¯ÊýµÄ³ÌÐòÄÚÈÝ£¬È»ºó°ÑÕâ¸öº¯Êý×÷Ϊ²ÎÊý´«Èë±ðÈË£¨»òϵͳ£©µÄº¯ÊýÖУ¬ÓɱðÈË£¨»òϵͳ£©µÄº¯ÊýÔÚÔËÐÐʱÀ´µ÷Óõĺ¯Êý¡£º¯ÊýÊÇÄãʵÏֵ쬵«ÓɱðÈË£¨»òϵͳ£©µÄº¯ÊýÔÚÔËÐÐʱͨ¹ý²ÎÊý´«µÝµÄ·½Ê½µ÷Óã¬Õâ¾ÍÊÇËùνµÄ»Øµ÷º¯Êý¡£¼òµ¥À´Ëµ£¬¾ÍÊÇÓɱðÈ˵ĺ¯ÊýÔËÐÐÆÚ¼äÀ´»Øµ÷ÄãʵÏֵĺ¯Êý¡£ÔÙÀ´¿´¿´À´×ÔStack Overflowijλ´óÉñ¼ò½àÃ÷Á˵ıíÊö£ºA ¡°callback¡± is any function that is called by another function which takes the first function as a parameter¡£ Ò²¾ÍÊÇ˵£¬º¯Êý FuncA µ÷Óú¯Êý FuncB)µÄʱºò£¬º¯Êý FuncAͨ¹ý²ÎÊý¸ø º¯Êý FuncB´«µÝÁËÁíÍâÒ»¸öº¯Êý FuncC µÄÖ¸Õ룬ÔÚº¯Êý FuncB Ö´ÐеĹý³ÌÖУ¬º¯ÊýFuncB µ÷ÓÃÁ˺¯Êý FuncC£¬Õâ¸ö¶¯×÷¾Í½Ð×ö»Øµ÷£¨Callback£©£¬¶øÏȱ»µ±×öÖ¸Õë´«Èë¡¢ºóÃæÓÖ±»»Øµ÷µÄº¯Êý F3 ¾ÍÊǻص÷º¯Êý¡£µ½´ËÓ¦¸ÃÃ÷°×»Øµ÷º¯ÊýµÄ¶¨ÒåÁ˰ɣ¿

ÎÒÃǽ«Ò»¿ªÊ¼µÄhello worldº¯ÊýÐ޸ijɺ¯Êý»Øµ÷Ñùʽ£º

1. ¼òµ¥µÄ»Øµ÷º¯Êý

//¶¨Ò廨µ÷º¯Êý
void PrintText(){
app_log("hello world!");
}
//¶¨ÒåʵÏֻص÷º¯ÊýµÄ¡°µ÷Óú¯Êý¡±
void CallprintfText(void (*callfunc)()){
callfunc();
}
int application_start( void )
{
OSStatus err = kNoErr;
CallprintfText(PrintText);
return err;
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 82] hello world!

2. ʹÓÃtypedefд·¨£º

typedef void (*CallFunc)();
//¶¨Ò廨µ÷º¯Êý
void PrintText(){
app_log("hello world!");
}
//¶¨ÒåʵÏֻص÷º¯ÊýµÄ¡°µ÷Óú¯Êý¡±
void CallprintfText(CallFunc callfunc){
callfunc();
}
int application_start( void )
{
OSStatus err = kNoErr;
CallprintfText(PrintText);
return err;
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 82] hello world!

3. Ð޸Ĵø²ÎÊýµÄ»Øµ÷º¯Êýд·¨

ÕâÀïÖ»·ÅÁËÒ»¸öÀàÐ͵IJÎÊý£¬ºÜÖØÒª£¡

void PrintText(char *s){
app_log("s:%s",s);
}
//¶¨ÒåʵÏֻص÷º¯ÊýµÄ¡°µ÷Óú¯Êý¡±
void CallprintfText(void (*callfunc)(char*),char *s){
callfunc(s);
}
int application_start( void )
{
OSStatus err = kNoErr;
CallprintfText(PrintText,"hello world!");
return err;
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 82] hello world!

4. ʹÓÃtypedefд·¨£º

typedef void (*CallFunc)(char *s,int count);
//¶¨Ò廨µ÷º¯Êý
void PrintText(char *s,int count){
app_log("s:%s",s);
app_log("count:%d",count);
}
//¶¨ÒåʵÏֻص÷º¯ÊýµÄ¡°µ÷Óú¯Êý¡±
void CallprintfText(CallFunc callfunc,char *s,int count){
callfunc(s,count);
}
int application_start( void )
{
OSStatus err = kNoErr;
CallprintfText(PrintText,"hello world!",1);
return err;
}

´òÓ¡µÄ½á¹ûÊÇ:

[0][TCP: main.c: 84] s:hello world!
[3][TCP: main.c: 85] count:1
   
1894 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì