通过函数更深入地传递指针

Pro*_*gga 0 c++ parameters pointers

我有一个我正在编写的网络框架(试图通过UDP实现可靠的层).我有这个接收函数,接受指向数据包对象的指针.然后,网络框架完成一整套内容以接收数据包,并将数据包指针的值设置为此数据包.但这会发生一些深层次的功能.所以我基本上想知道的是,为什么这不适合我的工作:(非常基本的例子向你展示我的意思)

void Main()
{
   int* intPointer = NULL;
   SomeFunction(intPointer);
   //intPointer is still null?
}
void SomeFunction(int* outInt)
{
   SomeOtherFunction(outInt);
}

void SomeOtherFunction(int* outInt)
{
   outInt = new int(5);
}
Run Code Online (Sandbox Code Playgroud)

Kei*_*ith 5

SomeOtherFunction按值传递指针,因此赋值仅更改传递的地址的本地副本.

要使其工作,请通过引用传递指针:

void Main()
{
   int* intPointer = NULL;
   SomeFunction(intPointer);
   //intPointer is still null?
}
void SomeFunction(int*& outInt)
{
   SomeOtherFunction(outInt);
}

void SomeOtherFunction(int*& outInt)
{
   outInt = new int(5);
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,使用返回值有什么问题吗?

void Main()
{
   int* intPointer = SomeFunction(intPointer);
   //intPointer is still null?
}
int* SomeFunction()
{
   return SomeOtherFunction();
}

int* SomeOtherFunction()
{
   return new int(5);
}
Run Code Online (Sandbox Code Playgroud)

[更新以下评论.]

好吧,如果你有一个指示状态的返回值,可能表示是否已经读取了整数,那么你真正想要的是(bool用作你的特定状态的占位符):

void Main()
{
   int intPointer = 0;
   if (SomeFunction(intPointer) == true)
   {
       // read something
   }
   else
   {
       // failed to read.
   }
}
bool SomeFunction(int& outInt)
{
   return SomeOtherFunction(outInt);
}

bool SomeOtherFunction(int& outInt)
{
   outInt = 5;
   return true;
}
Run Code Online (Sandbox Code Playgroud)