void func1(void) { } int func2(void) { } int func3(int a) { } int func4(int a,int b) { } int func5(int a,int b) { }
可以定义如下指针变量来记录其地址,注意指针变量的类型一定要跟函数匹配。
void (*p1)(void); int (*p2)(void); int (*p3)(int); int (*p4)(int,int);
函数的地址有两种方法获得 &函数名 或者 直接函数名,两种方式等效。
p1 = &func1; p2 = &func2; p3 = &func3; p4 = &func4; //以下等效于上面 p1 = func1; p2 = func2; p3 = func3; p4 = func4;
p1(); p2(); p3(1); p4(1,2);
(*p1)(); (*p2)(); (*p3)(1); (*p4)(1,2);
#include <stdio.h> void func1(void) { printf("this is func1\n"); } void func2(void) { printf("this is func2\n"); } int add(int a,int b) { printf("this is add\n"); return a+b; } int sub(int a,int b) { printf("this is sub\n"); return a-b; } int main() { void (*p1)(void); int (*p2)(int,int); int ret = 0; p1 = func1; p1(); (*p1)(); p1 = &func2; p1(); (*p1)(); p2 = add; ret = p2(1,2); printf("ret = %d\n",ret); ret = (*p2)(1,2); printf("ret = %d\n",ret); p2 = ⊂ ret = p2(1,2); printf("ret = %d\n",ret); ret = (*p2)(1,2); printf("ret = %d\n",ret); return 0; }
typedef void (*type1)(void); typedef int (*typ2)(void); typedef int (*type3)(int); typedef int (*type4)(int,int); void (*p1)(void); int (*p2)(void); int (*p3)(int); int (*p4)(int,int);
type1 p1; //等效于 void (*p1)(void); type2 p2; //等效于 int (*p1)(void); type3 p3; //等效于 int (*p3)(int); type4 p4; //等效于 int (*p4)(int,int);
原文地址:http://blog.csdn.net/xiaoliu0518/article/details/33314483