改变指针形入参的值
该入参为一个指针,希望在函数内改变其指向。调用函数传入的是一个指针类型实参。经测试多遍,一直没能改变其指向。
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;
}
总结:该方法是通过将指针地址作为指针的替身傀儡。消除栈分配内存的影响,从而避开了被重新初始化的命运。

浙公网安备 33010602011771号