当指针作为函数的实参数时,
就需要将函数形参声明为指针的指针才行
否则就相当于
void fun(int temp)//该函数其实没有起到修改temp的效果
{
temp = temp +1;
}
int main()
{
int a = 0;
fun(a);
}
同样的,
对于指针来说:
RobotCmd *_pThisCmd = nullptr;
if (command_handler->parseCmd(command, _pThisCmd))
{
printf("_pThisCmd address is:%p\n", _pThisCmd); //其实打印的是nullptr ,没有
}
bool movel_handler::parseCmd(std::string command, robot_cmd::RobotCmd *pRobot_cmd) //该函数没有起到修改pRobot_cmd的作用
{
RobotLCmd *_pThisCmd = new RobotLCmd();
_pThisCmd->cmd_type = moveL;
pRobot_cmd = _pThisCmd;
printf("pRobot_cmd address is:%p\n", pRobot_cmd);
}
正确做法如下:
RobotCmd *_pThisCmd = nullptr;
if (command_handler->parseCmd(command, &_pThisCmd)) ;
{
printf("_pThisCmd address is:%p\n", _pThisCmd); //此时,打印的是和函数parseCmd内部一样的地址
}
bool movel_handler::parseCmd(std::string command, robot_cmd::RobotCmd **pRobot_cmd)//形参,要用指针的指针
{
RobotLCmd *_pThisCmd = new RobotLCmd();
_pThisCmd->cmd_type = moveL;
*pRobot_cmd = _pThisCmd;//
printf("*pRobot_cmd adress in movel_handler :%p ",_pThisCmd);
}