关于指针的奇怪有关问题

关于指针的奇怪问题。
一段类似于下面的代码:

Func1()
{
   PBYTE pNewBuffer=NULL;
   Func2(pNewBuffer);
   pNewBuffer[1]=3;//发现这里不能访问pNewBuffer。这是为什么呢?我在Func2中已经new了。


Func2(PBYTE pNewBuffer)
{
   pNewBuffer=new BYTE[300];
}

------解决方案--------------------
引用:
一段类似于下面的代码:

Func1()
{
   PBYTE pNewBuffer=NULL;
   Func2(&pNewBuffer);
   pNewBuffer[1]=3;//发现这里不能访问pNewBuffer。这是为什么呢?我在Func2中已经new了。


Func2(PBYTE *pNewBuffer)
{
   *pNewBuffer=new BYTE[300];
}
函数调用后pNewBuffer的地址因为退栈,又改回NULL了

------解决方案--------------------
老问题了,Func2函数的参数指针的引用或者指针的指针。
比如修改成Func2(PBYTE& pNewBuffer)
------解决方案--------------------
要不用指针的指针,要不用指针引用。
这个跟传入一个int想返回是一样的,如下代码也是无效的。

void getint(int i)
{
  i = 2;
}

i也不会返回2的。
------解决方案--------------------
Func2()中new []的返回值只是修改了pNewBuffer的副本。可以这样改:

Func1()
{
   PBYTE pNewBuffer = NULL;
   Func2(&pNewBuffer);
   pNewBuffer[1] = 3;


Func2(PBYTE *pNewBuffer)
{
   *pNewBuffer = new BYTE[300];
}

------解决方案--------------------
很简单的问题,卤煮源码中的两个pNewBuffer是不一样的,尽管看起来没什么不同。Func2(PBYTE& pNewBuffer)是最可靠的处理方法。
------解决方案--------------------


//2种方案:

//1:
void Func2(PBYTE& pNewBuffer)
 {
    pNewBuffer=new BYTE[300];
 }
//调用Func2(pNewBuffer);

//2:
void Func2(PBYTE* pNewBuffer)
 {
    *pNewBuffer=new BYTE[300];
 }

//调用 Func2(&pNewBuffer);