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