函数指针用法

来源:互联网 发布:软件测试的目标 编辑:程序博客网 时间:2024/06/13 05:30

  函数指针是指向函数的指针变量,即本质是一个指针变量。

    int (*f) (int x); /*声明一个函数指针 */

    f=func; /*func函数的首地址赋给指针f */

   指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
          
类型说明符 (*函数名)(参数)
          
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。


例如:

typedef void (* PROCESS_CMD_T)(char * cmd, int cmdNameLen, char * data, int dataLen, char * ack, int * ackLen);


static PROCESS_CMD_T processCmdVector[5] =
{
        Process_Entrysystem,
        Process_StartLocalTrial,
        Process_RestTrial,
        Process_StopTrial,
        Process_ExitSystem,
};

 void Process_Entrysystem(char * cmd, int cmdNameLen, char * data, int dataLen, char * ack, int * ackLen);
           void Process_StartLocalTrial(char * cmd, int cmdNameLen, char * data, int dataLen, char * ack, int * pAckLen);
           void Process_RestTrial(char * cmd, int cmdNameLen, char * data, int dataLen, char * ack, int * pAckLen);
           void Process_StopTrial(char * cmd, int cmdNameLen, char * data, int dataLen, char * ack, int * pAckLen);
           void Process_ExitSystem(char * cmd, int cmdNameLen, char * data, int dataLen, char * ack, int * pAckLen);

processCmdVector[0](cmd,cmdNameLen,data,dataLen,ack,ackLen);

processCmdVector[1](cmd,cmdNameLen,data,dataLen,ack,ackLen);

processCmdVector[2](cmd,cmdNameLen,data,dataLen,ack,ackLen);

processCmdVector[3](cmd,cmdNameLen,data,dataLen,ack,ackLen);

processCmdVector[4](cmd,cmdNameLen,data,dataLen,ack,ackLen);

回调的时候:

typedef void (*printf)(int);

void printfwelcome(int len){

 printf("welcome------%d\n",len);

}

 void main(){

   printf m_printf = (printf) printfwelcome;

   (*m_printf)(10);

}
      运行结果 :"welcome------10

0 0
原创粉丝点击