C++ 回调函数 我给你分析清楚地址之间的关系

函数指针

首先要知道函数指针是个啥,才好理解回调函数。

int func1(int a, int b)
{
	return a + b;
}
void test01()
{
	//定义函数类型 
	typedef int(my_func)(int, int);
	//定义函数指针 
	cout << func1 << endl;   //002E1604
	my_func* pFunc = func1;   //func1代表地址
	cout << pFunc << endl;   //002E1604
	int result = func1(10, 20);
	int resultp = pFunc(10, 20);
	cout << (*pFunc) << endl;   //这个也是002E1604   这个就很费解。
	//我后来想了想,func是函数的地址,也是输出func的时候,输出的内容,
	//因为也没法输出整个函数嘛。
	//这里的输出的情况和普通的int型指针关于这三者的输出是不一样的。
	//不过一样的地址才可以解释下面的这句话。
	int resultp2 = (*pFunc)(10, 20);
	printf("%d,%d,%d\n", result, resultp, resultp2);   //输出都是30.
	//接着直接定义函数指针类型 
	typedef int(*my_pfunc)(int, int);
	my_pfunc  pFunc2 = func1;
	printf("%d\n", pFunc2(10, 20));
	//接着直接定义函数指针变量
	int(*my_func_p)(int, int) = NULL;
	my_func_p = func1;
	printf("%d\n", my_func_p(10, 20));
}

作为形参时。

int add3(int a, int b)
{
	return a + b - 10;
}
//函数指针作为另外一个函数的参数 
void test02(int(*pAdd)(int, int))   //表示一个函数指针变量 pAdd
{
	int a = 100;
	int b = 200;
	int result = pAdd(a, b);    //这个的pAdd在实际执行时,会得到add3的值,即地址。
	printf("result = %d\n", result);
}
//调用
test02(add3);

以上是我以前写的一份讲解指针知识里面的一部分,我觉得对函数指针讲的很清楚。
想一下子弄懂结构体 指针 数组 函数 等等之间的各种组合体嘛。比如 函数指针、指针数组等等。
看我的这两篇文章吧。
关于指针的知识回顾
把数组、结构体等都看成是一种数据类型!

回调函数

就是把函数名作为参数传递。函数名就是地址。前面提到的。
上面的例子中的test02(add)就是回调函数的一个例子,实际运行的时候,test02会调用add3()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指针的值是地址

觉得还不错,我会继续努力的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值