标签:
与一般的数据一样,函数在内存中也占有一定空间,所以函数也有“地址”的概念,函数指针就是指向这个“地址”(即函数代码块的起始地址),函数指针的type就是函数本身。知道了地址,我们很轻松的就能靠函数指针来完成函数调用。
1、简单函数指针:
1void add(int a, int b){ //这里写了一个很简单的函数 2 cout << a + b << endl; 3 }
1 void (*p1)(int a, int b); //声明一个函数指针,指向的函数类型为“返回void,两个int参数”的函数 2 p1 = add; //赋值 3 //void (*p1)(int a, int b) = add; //也可以这样赋值,一个意思 4 (*p1)(1, 2); //这里是两种调用方法,出于某历史原因,这两者是等价的= = 5 p1(1, 2);
2、包含多个函数指针的数组:
1 void (*p2[2])(int a, int b); //声明 2 p2[1] = add; //赋值 3 p2[1](2,3); //调用,同样两种方法都可以 4 (*p2[1])(3,4);
3、指向包含多个函数指针数组的指针:
稍微有一点点拗口,这个指针指向的是上一点中“包含多个函数指针的数组”。
1 void (*(*p3)[2])(int a, int b); //无非就是将p2用*p3代替 2 p3 = &p2; //指针赋值前必须要初始化 3 (*p3)[1] = add; 4 (*p3)[1](1, 2); //调用 5 ((*p3)[1])(1, 2);
c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3)[2])(int a, int b)= &p2;
标签:
原文地址:http://www.cnblogs.com/decade-dnbc66/p/5388995.html