二级指针作为函数参数

void Func2(int **ptr)
{
    int *ptr2;
    ptr2 = *ptr;
    cout << __LINE__ << ": ptr=" << ptr << endl;  //76 输出二级指针ptr中存放的数据(为&p1)
    cout << __LINE__ << ":*ptr="<< *ptr << endl; //77  输出二级指针ptr的一级解引用,因为ptr中存放的&p1,所以*ptr输出的是p1的地址中所存放的数据,又因为p1中所存放的是&var,所以输出结果为var1的地址 
    cout << __LINE__ << ":*ptr2=" << *ptr2 << endl;  //78 ptr2的解引用,因为ptr2中存放的是*ptr,*ptr是二级指针ptr的一级解引用,即存放的是var1的地址,对var1的地址进行解引用输出的是var1的值
    cout << __LINE__ << ":ptr2=" << ptr2 << endl;     //79 ptr2中存放的是*ptr,参考77行注释
}

int main(void)
{
    int var1 = 12;
    int *p1 = &var1;
/*    testCreateListHead();
    ForeachList(List);
    cout << endl;
    ForeachList(List);
*/
    cout << __LINE__ << ":&var=" << &var1 << endl; //91    输出变量var在内存中的地址
    cout << __LINE__ << ": &p1=" << &p1 << endl;    //92    输出指针变量p1在内存中的地址
    cout << __LINE__ << ":  p1=" << p1 << endl;        //93    输出指针变量 p1中存放的内容(为&var1)
    Func2(&p1);
    return 0;
}

程序输出结果:
91:&var=0x7ffffffed94c
92: &p1=0x7ffffffed950
93: p1=0x7ffffffed94c
76: ptr=0x7ffffffed950
77: *ptr=0x7ffffffed94c
78: *ptr2=12
79:ptr2=0x7ffffffed94c

你可能感兴趣的:(二级指针作为函数参数)