初学者编程入门:C++指针使用方法

初学者编程入门:C++指针使用方法,第1张

初学者编程入门:C++指针使用方法,第2张

为什么在下面的函数声明中使用*和&符号?以及这个宣言会在什么场合使用?

void func 1(my class * & pBuildingElement);

经常有人问这样的问题。本文试图通过一些使用指针的实践经验来解释这个问题。仔细看这个说法有点混乱。从某种意义上说,“*”和“&”是两个对立的东西。把它们放在一起有什么意义?

为了理解指针的这种做法,我们先来回顾一下C/C++编程中无处不在的指针概念。我们都知道MYCLASS*的意思:指向类型为MYCLASS的对象的指针。

void func 1(my class * pmy class);
//例如:MYCLASS * p = new MYCLASS
func 1(p);

上面代码的这种处理方式想必大家都用过。创建一个MYCLASS对象,然后将其传递给func1函数。现在假设这个函数想要修改pMyClass:

void func 1(my class * pmy class)
{
do something(pmy class);
pmy class =
/指向其他对象的指针
}

第二条语句只修改function过程中pMyClass的值。调用者的变量p的值不被修改。如果p指向地址为0x008a00的对象,当func1返回时,它仍然指向这个特定的对象。(除非func1有bug会搞乱堆,这是完全有可能的。)

现在假设你想修改func1中p的值。这是你的权利。调用者传入一个指针,然后函数给这个指针赋值。以前它用来传递双指针,也就是指针的指针,比如CMyClass**。

MYCLASS * p = NULL
func 1(& p);
void func 1(my class * * pmy class);
{
* pmy class = new my class;
……
}

调用func1后,p指向新对象。在COM编程中,到处都会遇到这样的用法——例如,在查询对象接口的QueryInterface函数中:

interface isome interface
{
HRESULT query interface(IID & iid,void * * ppvObj);
……
};
lpsome interface p = NULL;
pOb-> query interface(IID _ some interface,& p);

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 初学者编程入门:C++指针使用方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情