函数指针的了解

思考:

任务A可以分为三部分:A1,A2,A3

A1,A2,A3三部分顺序执行

其中A1,A3的代码是相同的

A2是灵活的

要实现上面的效果:

可以参考下面的文章

函数指针:C语言中的灵活调用_c语言 灵活使用函数指针-CSDN博客

C语言指针进阶(一)——深入详解“函
数指针”与“指针函数”-CSDN博客

void A1()
{

}
void A2_1()
{
    qDebug()<<"A2_1()";
}
void A2_2()
{
    qDebug()<<"A2_2()";
}
void A2_3()
{
    qDebug()<<"A2_3()";
}

void A3()
{

}
void A(void (*A2)())
{
    A1();
    A2();
    A3();
}

int main(int argc, char *argv[])
{
    void (*A2)() = NULL;
    A2 = A2_1;
    A(A2);
    A2 = A2_2;
    A(A2);
    A2 = A2_3;
    A(A2);
    return 0;
}

函数指针还挺好用嘞

-------------------------------------------------------

如果函数A2有参数呢?


void A1()
{

}
void A2_1(QByteArray &ba)
{
    ba.append(1);
    qDebug()<<"A2_1()";
}
void A2_2(QByteArray &ba)
{
    ba.append(2);
    qDebug()<<"A2_2()";
}
void A2_3(QByteArray &ba)
{
    ba.append(3);
    qDebug()<<"A2_3()";
}

void A3()
{

}
void A(void (*A2)(QByteArray &))
{
    QByteArray ba;
    ba.append(0xFF);
    A1();
    A2(ba);
    A3();
    ba.append(0xFF);
    qDebug()<<ba.toHex();
}

int main(int argc, char *argv[])
{
    void (*A2)(QByteArray &) = NULL;
    A2 = A2_1;
    A(A2);
    A2 = A2_2;
    A(A2);
    A2 = A2_3;
    A(A2);
    return 0;
}

---------------------------------------------------------

如果有时候我不希望执行A2,该怎么办呢?

void A1()
{

}
void A2_1(QByteArray &ba)
{
    ba.append(1);
    qDebug()<<"A2_1()";
}
void A2_2(QByteArray &ba)
{
    ba.append(2);
    qDebug()<<"A2_2()";
}
void A2_3(QByteArray &ba)
{
    ba.append(3);
    qDebug()<<"A2_3()";
}

void A3()
{

}
void A(void (*A2)(QByteArray &))
{
    QByteArray ba;
    ba.append(0xFF);
    A1();
    if(A2 != NULL)A2(ba);
    A3();
    ba.append(0xFF);
    qDebug()<<ba.toHex();
}

int main(int argc, char *argv[])
{
    A(NULL);
    return 0;
}

关键:

if(A2 != NULL)A2(ba);
A(NULL);

------------------------------------------------

如果我希望函数A默认就调用A(NULL);怎么办?

void A(void (*A2)(QByteArray &) = NULL)

设置一个函数参数默认值

-----------------------------------------------------------

有一个问题:

A2如果是类成员函数,必须是static类型的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值