#include <iostream>
using std::cout;
using std::endl;
typedef int (*pf)(int i);
int f2(int i)
{
return i;
}
int f3(int i)
{
return 2*i;
}
pf f(bool b) //第一种声明方式
//int (*f(bool b))(int i) //第二种声明方式
{
return (b?f2:f3);
}
int main()
{
pf p = f(true); //f()是一个已经声明的函数, 用法跟普通的函数一样, 有一点不同的是, 他的返回值是函数指针;
//当然, f 作为右值, 那左值就必须是符合的函数指针类型.
cout<<p(1) << endl;
p = f(false);
cout<<p(1) << endl;
system("pause");
return 0;
}
指向函数的指针, 刚开始接触真是头大呢.
指针的类型竟然可以是函数, 我不得不佩服 C++ 的强大呢, 并且每个已声明的函数, 如 int foo(), 函数名foo 就是一个函数指针, 这个倒是跟数组名有点相似呢. 所以 foo 变为 (* p2foo) 也就不奇怪了, 只是 foo 的地址已经确定, 而 p2foo 使用时必须初始化, 并且初始化以后也可以赋值, 可以由返回值和参数相同的函数初始化或赋值. 如 p2foo = foo; 或者 p2foo = &foo.
现在也理解了 javascript 的 回调函数了. 虽然C++ 还没成为我工作中的一部分. 但是对学习 java 和 javascript 却有所获益.