1分钟学会函数指针与回调函数(上)_哔哩哔哩_bilibili
#include
#include
int sum(int x,int y){
return x+y;
}
int difference(int x,int y){
return x-y;
}
int product(int x,int y){
return x*y;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
int a=5;
int b=8;
int (*p_func)(int,int);
p_func=sum;
printf("sum's address=%p\n",sum);
printf("func_ptr=%p\n",p_func);
printf("%d+%d=%d\n",a,b,sum(a,b));
printf("%d+%d=%d\n",a,b,p_func(a,b));
return app.exec();
}
sum's address=00401659
func_ptr=00401659
5+8=13
5+8=13
函数指针func_ptr指向的地址为00401659
函数名的首地址是00401659
函数名可以被看作一个常量,它保存了函数的内存地址,
函数的内存地址,存储了函数开始执行的位置。
C语言 | 函数指针作为函数的参数_函数指针作为参数_嵌入式大杂烩的博客-CSDN博客
#include
#include
typedef int (*fun_t)(int,int);
int calculate(int a,int b,fun_t operation)
{
int result;
result=operation(a,b);
return result;
}
int add2(int a,int b)
{
return a+b;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
int result;
int a=192,b=48;
result=calculate(a,b,add2);
printf("%d+%d=%d\n",a,b,result);
return app.exec();
}
关键:
typedef int (*fun_t)(int, int);
fun_t指向一个带两个int类型的形参,int类型的返回值的函数。
使用关键字typedef int(*)(int,int)进行重命名为fun_t。
函数指针可以作为参数传递给另一个函数。
这时函数指针的使用就像普通的常量和变量。
函数指针作为参数传递的时候,接收参数传递的函数
通常需要根据指针调用对应的函数。
函数指针做函数参数 使用总结及其意义_函数指针作为函数的参数_AI浩的博客-CSDN博客
函数名是函数体的入口地址
(1)可通过函数类型定义函数指针:FuncType* pointer;
(2)可直接定义:type (*pointer)(parameter list);
pointer:函数指针变量名
type:函数的返回值类型
parameter list:指向函数的参数列表。
#include
#include
using namespace std;
int add(int a,int b)
{
return a+b;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
int sum=add(1,2);
cout<<"sum:"<
sum:3
sum1:6
sum2:8
sum3:15
思考:
myFunc=&add;
这里为什么要取地址?
{
typedef int(*PFuncType)(int a,int b);
PFuncType myFunc=NULL;
myFunc=&add;
int sum2=myFunc(3,5);
cout<<"sum2:"<
结果一致,这两者有什么区别?
函数指针A指向函数C
函数指针A作为函数参数,传递给一个被调用函数B,被调用函数
就可通过该指针调用外部函数C,这就形成了回调。