指针函数和函数指针

指针函数

指针函数其实就是返回值是指针类型的方法
让我们看如下代码,即可一目了然:

// 返回值是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();
}

以上则可以看出指针函数的作用,如果有类似的使用场景则可以使用。

你知道的越多,不知道的越多,我们下期见。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值