#include"iostream"
class CMessage
{
public:int a;
CMessage(){}
~CMessage(){}
};
void Testing(CMessage *f_pMessage)//l_pMessage is output parameter
{
f_pMessage = new CMessage();
f_pMessage->a = 1;
}
int main()
{
CMessage *l_pMessage =NULL;
Testing(l_pMessage);
std::cout<<l_pMessage->a;//getting l_pMessage = NULL;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我调用测试时,内部测试f_pMessage正在初始化但是在我激活测试函数后,它应该存储在l_Pmessage中,但它显示为NULL.confussed .....
Testing(l_pMessage);
Run Code Online (Sandbox Code Playgroud)
在这一行,您传递指针的副本.您需要传递指针指针或指针的引用:
void Testing(CMessage *& f_pMessage)//l_pMessage is output parameter
{
f_pMessage = new CMessage();
f_pMessage->a = 1;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用指向指针的其他方式执行此操作:
void Testing(CMessage **f_pMessage)//l_pMessage is output parameter
{
*f_pMessage = new CMessage();
(*f_pMessage)->a = 1;
}
Run Code Online (Sandbox Code Playgroud)
但是你必须这样调用函数:
Testing(&l_pMessage);
Run Code Online (Sandbox Code Playgroud)
通过指针传递只允许您修改指向的内容.指针本身仍然按值传递.
由于您想要更改指针,您可以将指针传递给指针或通过引用获取指针:
void Testing(CMessage *&f_pMessage)//l_pMessage is output parameter
{
f_pMessage = new CMessage();
f_pMessage->a = 1;
}
Run Code Online (Sandbox Code Playgroud)