二级指针作为函数参数

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。