函数指针是指向函数的指针变量,即本质是一个指针变量。
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