改变指针形入参的值

该入参为一个指针,希望在函数内改变其指向。调用函数传入的是一个指针类型实参。经测试多遍,一直没能改变其指向。

int NET_ARG_DoorFSMgetCurEvtTab(NET_FSM_S* fsm, OUT NET_ACTION_ST* curActTab)
{
    NET_STA_TAB_ST *curStaTab = &(fsm->curStaTab[fsm->getCurState(fsm)]);
    curActTab = &curStaTab->stActTab[0];
    return curStaTab->iActCnt;
}

突然想到指针也是一个变量。只要是变量,传入的实参和形参是分离的,也就是说计算机会重新给入参分配栈空间。

那么,解决的方法就是在调用者处传入一个指针变量的地址。在被调用处通过这个指针变量的地址获取实际的指针变量修改。修改后:

int NET_ARG_DoorFSMgetCurEvtTab(NET_FSM_S* fsm, OUT NET_ACTION_ST** curActTab)
{
    NET_STA_TAB_ST *curStaTab = &(fsm->curStaTab[fsm->getCurState(fsm)]);
    *curActTab = &curStaTab->stActTab[0];
    return curStaTab->iActCnt;
}

总结:该方法是通过将指针地址作为指针的替身傀儡。消除栈分配内存的影响,从而避开了被重新初始化的命运。

posted @ 2021-02-06 16:16  CyrilJiang  阅读(151)  评论(0)    收藏  举报