当前位置: 代码迷 >> 综合 >> 指针作为函数的传递参数遇到的坑
  详细解决方案

指针作为函数的传递参数遇到的坑

热度:95   发布时间:2024-02-27 03:30:22.0

当指针作为函数的实参数时,

就需要将函数形参声明为指针的指针才行

否则就相当于

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);}

 

  相关解决方案