指针函数
指针函数其实就是返回值是指针类型的方法
让我们看如下代码,即可一目了然:
// 返回值是int类型的函数
int fun_add(int a , int b)
{
return a + b;
}
// 返回值是int指针类型,即 指针函数
// 但是编译器会有警告提示,不能返回局部对象的地址,因为局部变量在方法结束后就会被释放,因此返回回去的地址并不是我们想要的东西
// 因此如果需要使用指针函数,可以将下方 c定义成静态对象
int* fun_add_pointer(int a , int b)
{
//int c = a+b;
static int c = a+b;
return &c;
}
使用如下:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << " 普通函数结果:" << fun_add(1,1); // 输出:普通函数结果: 2
qDebug() << " 指针函数返回:" << *fun_add_pointer(1,1); // 输出:指针函数返回: 2
return a.exec();
}
函数指针
函数指针其实也是一个指针,只不过是指向函数的指针。
定义如下:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 定义函数指针
int (*fun_p)(int , int );
// 函数指针初始化,注:只能指向相同参数,相同返回值的函数
fun_p = fun_add;
qDebug() << " 函数指针结果:" << fun_p(1,1);
return a.exec();
}
可能有人会说,这样的作用是啥,上述的使用方式确实比较鸡肋,但是函数指针一般是用于回调函数。
让我们往下看。
// 定义一个函数指针
typedef int (*fun_p)(int ,int);
// 加法
int fun_add(int a , int b)
{
return a + b;
}
// 减法
int fun_sub(int a , int b)
{
return a - b;
}
// 将函数指针作为参数,让其在方法中可以按照传入的函数参数不同从而使用不同的函数
void fun_cal(fun_p p , int a , int b)
{
qDebug() << " 运行方法:" << p(a,b);
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
fun_cal(fun_add,1,1); // 输出: 运行方法:2
fun_cal(fun_sub,2,1); // 输出: 运行方法:1
return a.exec();
}
以上则可以看出指针函数的作用,如果有类似的使用场景则可以使用。
你知道的越多,不知道的越多,我们下期见。