
函数指针和指针函数
1.两个例子:
(1)void *func(void); 这是指针函数的一个例子。按照()的优先级高于*,所以这是一个函数,返回值为指针。
(2)void (*func)(void); 这是函数指针的一个例子。函数指针本身是一个指针,指向的是原型为void f(void)的函数。你只需要func=函数名,然后func().即可调用那个函数。
对void(*PF(void (*func)()))();的理解可以展开:
以上程序均在ubuntu+codeblocks环境下通过测试。
(1)void *func(void); 这是指针函数的一个例子。按照()的优先级高于*,所以这是一个函数,返回值为指针。
(2)void (*func)(void); 这是函数指针的一个例子。函数指针本身是一个指针,指向的是原型为void f(void)的函数。你只需要func=函数名,然后func().即可调用那个函数。
- #include <iostream>
-
- using namespace std;
- void f() {
- cout << "f()" << endl;
- }
- void g() {
- cout << "g()" << endl;
- }
- void h() {
- cout << "h()" << endl;
- }
- void (*my_func)();
- int main()
- {
- my_func = f;
- my_func();
- return 0;
- }
2.typedef void (*func)(void);这里把func作为函数指针的同义词。这个函数的原型为void f(void);
- #include <iostream>
-
- using namespace std;
- void f() {
- cout << "f()" << endl;
- }
- void g() {
- cout << "g()" << endl;
- }
- void h() {
- cout << "h()" << endl;
- }
- typedef void(*PF)();
- int main()
- {
- PF pf= f;
- pf();
- return 0;
- }
3.用函数指针作为函数的返回值。
- #include <iostream>
-
- using namespace std;
- void f() {
- cout << "f()" << endl;
- }
- void g() {
- cout << "g()" << endl;
- }
- void h() {
- cout << "h()" << endl;
- }
- void (*my_func)();
- //指定调用的函数
- void(*PF(void (*func)()))() {
- void(*old)() = my_func;
- my_func = func;
- return old;
- }
- int main()
- {
- my_func = f;
- PF(h)();
- my_func();
- return 0;
- }
分析:上面小程序的作用是为my_func指定要调用的函数。而void(*PF(void (*func)()))()即完成了这个任务。
对void(*PF(void (*func)()))();的理解可以展开:
- typedef void(*PF)();
- PF func(void(*p)()) {}
所以上面的 程序还可以这样写:
- #include <iostream>
-
- using namespace std;
- void f() {
- cout << "f()" << endl;
- }
- void g() {
- cout << "g()" << endl;
- }
- void h() {
- cout << "h()" << endl;
- }
- void (*my_func)();
- typedef void(*PF)();
- PF (func)(void(*p)()) {
- void(*old)() = my_func;
- my_func = p;
- return old;
- }
- int main()
- {
- my_func = f;
- func(h)();
- my_func();
- return 0;
- }
总结:函数指针确实比较难理解。但是好在函数指针的作用并不是很常用。函数指针通常用来指定要调用的函数。这也是我在看"STL源码剖析"的时候,才注意到了这种用法。
以上程序均在ubuntu+codeblocks环境下通过测试。
本文详细解析了函数指针与指针函数的概念及应用,包括如何定义和使用函数指针,通过实例展示了函数指针作为参数和返回值的应用场景。

795

被折叠的 条评论
为什么被折叠?



