第一种和第二种情况有什么区别?

Bra*_* Ds 2 c

第一个和第二个案例有什么区别,为什么第一个工作按预期工作,而第二个工作没有?(在第二种情况下,我试图引入一个指针,取消引用指针指针,以避免键入额外的星号).

int _tmain(int argc, _TCHAR* argv[])
{
    int* test = NULL;
    foo(&test);
}
Run Code Online (Sandbox Code Playgroud)

情况1:

void foo(int** ppPar)
{
    *ppPar = (int*)malloc(sizeof(int));
    **ppPar = 7;
}
Run Code Online (Sandbox Code Playgroud)

案例2:

void foo(int** ppPar)
{
    int* pPar = *ppPar;
    pPar = (int*)malloc(sizeof(int));
    *pPar = 6;
}
Run Code Online (Sandbox Code Playgroud)

Moo*_*uck 6

*ppPar = ...
Run Code Online (Sandbox Code Playgroud)

这会重新指定testmain中的指针;

**ppPar = 7
Run Code Online (Sandbox Code Playgroud)

这会更改testmain中指向的值.


int* pPar = *ppPar;
pPar = 
Run Code Online (Sandbox Code Playgroud)

这将生成main中指针的副本test,然后重新分配副本.(所以现在根本没有联系test.

*pPar = 6;
Run Code Online (Sandbox Code Playgroud)

这会更改指定的值pPar,该值不再与之关联test.