修改指针的值:
把一个指针赋值给另一个指针,只修改值,不修改地址
如以下函数:
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);