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