VC指针的问题

for(vector<AniIFace*>::iteratori=m_aMyFrameAni.begin();i!=m_aMyFrameAni.end();i++){if... for (vector<AniIFace *>::iterator i = m_aMyFrameAni.begin(); i != m_aMyFrameAni.end();i++)
{
if ((*i)->IsEnd() == false)
{
(*i)->Draw(pDC);
}
}

为什么是(*i)->IsEnd()而不是i->IsEnd() 或者(&i)->IsEnd(),请高手分别讲讲谢谢了
展开
 我来答
lightshield
2011-07-17 · TA获得超过845个赞
知道小有建树答主
回答量:308
采纳率:0%
帮助的人:432万
展开全部
1 、首先要明白,-> 用于左边是“指向对象的指针”,右边是“对象的成员",否则就是语法错误;
2、要看的懂 i 的定义:vector<AniIFace *>::iterator i
这里的 i 是一个iterator (就是一种特殊指针),它指向了一个vector<T>的首元素的地址
3、加上解引用符号*, (*i) 就表示了vector<T>的首元素,这个元素是一个AniIFace * (就是一个指向AniIFace 类型的指针)

由上三点,为什么是(*i)->IsEnd()??
因为,IsEnd() 是 AniIFace 类的成员函数,(*i) 就等于一个指针,它指向AniIFace 类型。

为什么不是i->IsEnd() ??
因为 i 虽然是一个指针,但是 IsEnd() 并不是 i 指向的类型的成员函数(i指向了一个指针,这个指针指向AniIFace 类)

为什么不是(&i)->IsEnd(),??
因为(&i) 又取了 i 的地址,(&i) 指向了一个指针,这个指针指向了一个AniIFace 类指针。。。
memberwin
2011-07-17 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:510万
展开全部
竟然没人回答?
i被声明为iterator, iterator类型本身就是一种特殊指针
所以必须使用类似指针的方式使用,即 *i表示vector中的元素
在访问类的成员时,只有指针才能用->的形式访问,否则要用"."来访问,比如 class.member
所以只能用(*i)->IsEnd()的形式,
i->IsEnd() 错误,原因是i是vector的iterator,并没有IsEnd函数,不过可以用 i == m_aMyFrameAni.end()作为判断条件
(&i)->IsEnd()就更说不通了,对i取地址是没什么意义的,其更没有IsEnd函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式