C++练笔例子4

#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 却有所获益.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值