函数指针 raw function pointer

函数指针(来自C语言):Raw style function pointers
函数指针是将函数赋值给一个变量的方法

不带参

#include <iostream>

void HelloWorld()
{
	std::cout << "Hello World!" << std::endl;
}

int main()
{
	auto function = HelloWorld;
	function();
	std::cin.get();
}

带参

#include <iostream>

void HelloWorld(int a)
{
	std::cout << "Hello World!" << a << std::endl;
}

int main()
{
	auto function = HelloWorld; //方法1:auto,这里的HelloWorld类似于&HelloWorld,函数地址,这里有一个隐式转换;函数是CPU指令,编译代码时,函数就在二进制文件的某个地方,在我们的可执行文件中,这句话是让我们来获取那些CPU指令的内存地址
	function(9);

	typedef void(*HelloWorldFunction)(int); //方法2:定义类型
	HelloWorldFunction function1 = HelloWorld;
	function1(8);

	void(*function2)(int) = HelloWorld; //方法3:C语言函数指针的定义状态
	function2(9);

	std::cin.get();
}

举例:

#include <iostream>
#include <vector>

void PrintValue(int value)
{
	std::cout << "Value:" << value << std::endl;
}

void ForEach(const std::vector<int>& values, void(*func)(int))
{
	for (int value : values) //将values里的变量依次赋值给value
		func(value);
}

int main()
{
	std::vector<int> values = { 1, 5, 4, 2, 3 };
	ForEach(values, PrintValue);
	std::cin.get();
}

举例:简化用lambda

#include <iostream>
#include <vector>

void ForEach(const std::vector<int>& values, void(*func)(int))
{
	for (int value : values) //将values里的变量依次赋值给value
		func(value);
}

int main()
{
	std::vector<int> values = { 1, 5, 4, 2, 3 };
    ForEach(values, [](int value) {std::cout << "Value:" << value << std::endl;}); //lambda是匿名函数,用完就销毁,所以直接给参数,同时有函数体
	std::cin.get();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值