CObject*& rValue这个声明是什么意思?

gogoback 2004-07-22 10:28:42
在MSN中看到这么一段:
BOOL Lookup( LPCTSTR key, CObject*& rValue ) const;
Return Value
Nonzero if the element was found; otherwise 0.
Parameters
key
Specifies the string key that identifies the element to be looked up.
rValue
Specifies the returned value from the looked-up element.

其中CObject*& rValue的声明方法很奇怪,我从来不知道“&”符号还可以用在声明里面,请问大家有谁可以解释的?谢谢。

...全文
205 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
RookieStar 2004-07-22
  • 打赏
  • 举报
回复
晕了,到现在才看自己的回复。。。

不好意思,误导你了,"引用的是一个CObject指针"
kaphoon 2004-07-22
  • 打赏
  • 举报
回复
char*&
对字符串的引用
leonchew 2004-07-22
  • 打赏
  • 举报
回复
打错了,是引用
leonchew 2004-07-22
  • 打赏
  • 举报
回复
rValue变量是CObject指针对象的应用
freefalcon 2004-07-22
  • 打赏
  • 举报
回复
C++语法
CObject*& rValue

这里*表示指针,&表示引用,即rValue是一个CObject*的引用,引用的概念与指针比较类似,具体看C++方面书籍

这里的函数声明相当于C里面的
BOOL Lookup( LPCTSTR key, CObject** pValue ) const;
二者的目的一样,都是为了改变指针参数本身
但是调用形式上却有差别
前者的调用方式为:
CObject* pv;
Lookup("", pv);
后者为
Lookup("", &pv);
RookieStar 2004-07-22
  • 打赏
  • 举报
回复
声明rValue变量是个引用,引用的是一个CObject对象。
bm1408 2004-07-22
  • 打赏
  • 举报
回复
在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式?

void func1( MYCLASS *&pBuildingElement );
论坛中经常有人问到这样的问题。本文试图通过一些实际的指针使用经验来解释这个问题。
仔细看一下这种声明方式,确实有点让人迷惑。在某种意义上,"*"和"&"是意思相对的两个东西,把它们放在一起有什么意义呢?。为了理解指针的这种做法,我们先复习一下C/C++编程中无所不在的指针概念。我们都知道MYCLASS*的意思:指向某个对象的指针,此对象的类型为MYCLASS。 void func1(MYCLASS *pMyClass);

// 例如: MYCLASS* p = new MYCLASS;
func1(p);
上面这段代码的这种处理方法想必谁都用过,创建一个MYCLASS对象,然后将它传入func1函数。现在假设此函数要修改pMyClass: void func1(MYCLASS *pMyClass)
{
DoSomething(pMyClass);
pMyClass = // 其它对象的指针
}

第二条语句在函数过程中只修改了pMyClass的值。并没有修改调用者的变量p的值。如果p指向某个位于地址0x008a00的对象,当func1返回时,它仍然指向这个特定的对象。(除非func1有bug将堆弄乱了,完全有这种可能。)
现在假设你想要在func1中修改p的值。这是你的权利。调用者传入一个指针,然后函数给这个指针赋值。以往一般都是传双指针,即指针的指针,例如,CMyClass**。 MYCLASS* p = NULL;
func1(&p);

void func1(MYCLASS** pMyClass);
{
*pMyClass = new MYCLASS;
……
}

调用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 func1(MYCLASS *&pMyClass);
{
pMyClass = new MYCLASS;
……
}

其实,它和前面所讲得指针的指针例子是一码事,只是语法有所不同。传递的时候不用传p的地址&p,而是直接传p本身:

北极猩猩 2004-07-22
  • 打赏
  • 举报
回复
应该是一个CObject的指针的引用,可以用来做这样的工作

void getMemory(char*& p)
{
p = new char[100];
}
holmesma 2004-07-22
  • 打赏
  • 举报
回复
CObject指针对象的引用

《c++ primer》上提到过(第四版第七章),可以看看

void ptrswap( int *&v1, int *&v2 ) {
int *tmp = v2;
v2 = v1;
v1 = tmp;
}

看看这个函数 有没有帮助理解!:)
foolboy1229 2004-07-22
  • 打赏
  • 举报
回复
到底是“一个CObject引用的指针”还是“一个CObject的指针的引用”

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧