C++指针与引用

来源:互联网 发布:php msgpack pack 编辑:程序博客网 时间:2024/06/06 03:55

修改指针的值:

把一个指针赋值给另一个指针,只修改值,不修改地址

如以下函数:

void Func2(myUtil* pMyClass ,myUtil* newPMyClass) {int data = pMyClass->data;cout << data << endl;/*pMyClass = newPMyClass;*/      //此时只修改了newPMyclass的调用值 并没有修改地址pMyClass = new myUtil(20);       //传值传入新的值data = pMyClass->data;cout << data << endl;return;}

根据输出结果, pMyClass的值发生变化,但存储地址没有发生变化

双指针的使用

使用例子:

void Func3(myUtil** pMyClass) {*pMyClass = new myUtil(50);   //双指针会改变地址 指向别的区域}
函数的参数是一个指针的指针

当传入一个指针时 函数的值与地址会发生。

函数的使用:Func3(&p)     //传入一个指针

调用func1之后,p指向新的对象。在COM编程中,你到处都会碰到这样的用法--例如在查询对象接口的QueryInterface函数中:       interface ISomeInterface {    
         HRESULT QueryInterface(IID &iid, void** ppvObj);   
         ……   
      };   
      LPSOMEINTERFACE p=NULL;    
      pOb->QueryInterface(IID_SOMEINTERFACE, &p);   
       
  此处,p是SOMEINTERFACE类型的指针,所以&p便是指针的指针,在QueryInterface返回的时候,如果调用成功,则变量p包含一个指向新的接口的指针。 


引用指针:

void Func4(myUtil* &pMyClass) {pMyClass = new myUtil(60);   //指针传地址引用}

效果类似于双指针的使用:

使用时 直接把指针传入就好Func4(p);