传递指针不起作用

Sur*_*uri 2 c++

#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 .....

Ara*_*raK 8

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)


R S*_*hko 5

通过指针传递只允许您修改指向的内容.指针本身仍然按值传递.

由于您想要更改指针,您可以将指针传递给指针或通过引用获取指针:

void Testing(CMessage *&f_pMessage)//l_pMessage is output parameter
{
    f_pMessage = new CMessage();
    f_pMessage->a = 1;
}
Run Code Online (Sandbox Code Playgroud)

  • @ user323422 - 既然你明白了这一点,那么接受一个答案就是常见的礼貌(我也会建议去一些或者你的旧问题并接受那些你得到了好答案的问题) (2认同)