函数指针指向代码区,普通指针指向数据区。函数指针定义如下:
返回类型 (*函数指针变量)(参数表)
例如,void (*pf)()指向形如void f()这样的函数。
使用函数指针的例子:
void open();//对几个函数声明 void print(); void exit(); void (*pfs[])()={open,print,exit};//函数指针数组 int main(){ int i; void (*pf)(); pf=open; (*pf)();//////调用open() for(i=0;i<3;i++)////依次调用open()、print()、exit()函数 (*pfs[i])(); } void open(){ printf("open\n"); } void print(){ printf("print\n"); } void exit(){ printf("exit\n"); }
从这个例子可以看出,函数名本身就是函数代码区的地址。
还有几个容易混淆的定义,考虑下面几个定义:
void (*getInterrupt(int no))(); void setInterrupt(int no,void (*pf)); LRESULT (*lpfnWndProc)(HWND,UNIT,WPARM,LPARAM);
第一个声明表示getInterrupt的原型声明,它有一个int类型的参数,返回值是指向类似void f()函数的指针。
第二个声明表示函数setInterrupt的原型声明,返回值是void,它有两个参数,类型分别是int和指向void f()函数的指针。
第三个声明定义了一个指针变量lpfnWndProc,指向形如LRESULT wndproc(HWND,UNIT,WPARM,LPARAM)的函数。
时间: 2024-10-07 14:55:20