标签:
int (*func)(int x);
诸如上面的代码这是申明了一个函数指针,代码(*func)中括号是必须的,这会告诉编译器这是一个函数指针而不是声明一个具有返回类型为指针的函数,后面的形参要是这个函数所指向的函数形参而定。使用如下面的代码:
#include <iostream> using namespace std; int(*func)(int a, int b); int bar(int a, int b) { return a + b; } int foo(int a, int b) { return a; } int _tmain(int argc, _TCHAR* argv[]) { func = bar; cout << func(12, 34) << endl; system("pause"); func = foo; cout << func(12, 34) << endl; system("pause"); return 0; }
这样的声明有些繁琐,其实可以使用typedef来进行简化:
#include <iostream> using namespace std; typedef int(*PF)(int, int); //int(*func)(int a, int b); int bar(int a, int b) { return a + b; } int foo(int a, int b) { return a; } int _tmain(int argc, _TCHAR* argv[]) { PF func; func = bar; cout << func(12, 34) << endl; system("pause"); func = foo; cout << func(12, 34) << endl; system("pause"); return 0; }
函数指针的另一个作用就是作为函数的参数,可以在一个函数的形参列表中传入函数指针,然后边可以在这个函数中使用这个函数指针所指向的函数,这样边可以使程序变得更加清晰和简洁。
#include <iostream> using namespace std; typedef int(*PF)(int, int); //int(*func)(int a, int b); int bar(int a, int b) { return a + b; } int foo(int a, int b) { return a; } void func(int a, int b, PF ptr) { cout << ptr(a, b) << endl; return; } int _tmain(int argc, _TCHAR* argv[]) { PF ptr; ptr = bar; func(12, 34, ptr); system("pause"); ptr = foo; func(12, 34, ptr); system("pause"); return 0; }
int* func(int x,int y);
其实就是返回值是指针的函数,这个只要记住是什么形式就行了,不是很难懂。
标签:
原文地址:http://www.cnblogs.com/charleschiu/p/4340410.html