函数指针用法详解

函数指针: 所谓函数指针, 就是指向函数的指针

一. 声明方式

函数指针"类型"声明

typedef void (*fp)(int, int) = typedef 返回类型 (*类型名称)(参数...)
举例:

void test(int x, int y)
{
    cout << x << ',' << y << endl;
}

int main() {
    // 函数指针"类型"的声明
    typedef void (*fp)(int, int);
    // 用类型去声明一个变量
    fp p1 = test;
    // 变量初始化
    p1(1, 2);
 }
函数指针"变量"声明
void test(int x, int y)
{
    cout << x << ',' << y << endl;
}
int main() {
	//函数指针变量p2声明
	void(*p2)(int, int);
	// 初始化
	p2 = test;
	p2(3, 4);

	//函数指针变量p3声明并初始化
	void (*p3)(int, int) = test;
    p3(5, 6);
}

二. 使用方式

除了上面的直接声明使用, 大部分其实按照下列方法使用

作为函数参数

作为函数参数, 可以用作回调, 或者sort方法中的比较函数, 或者其他意想不到的用法

// 作为参数
void assign_vector(vector<int>& v, int (*p)())
{
    for (int i = 0; i < v.size(); i++)
    {
        v[i] = p();
    }
}

int get_rand()
{
    return rand();
}
int main() {
	vector<int> data = vector<int>(10, 1);
    assign_vector(data, get_rand);
    for (int v : data)
        cout << v << endl;
}
作为函数返回值
typedef void (*FUNC)(int, int);
FUNC get_func()
{
    return [](int x, int y) -> void{
        cout << "x = " << x << ", y = " << y << endl;
    };
}
int main() {
	FUNC f = get_func();
	f(7, 8);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值