|
假如有某类a
class a
{
private:
int x;
a *p1;
a *p2;
........
..........
a(int i):x(i),p2(NULL){.....}
a():p1(this){}
void bb();
};
void a::bb()
{
p1->p2=new a(1);//第一次
p1->p2=new a(2);//第二次
p1->p2=new a(3);//第三次
}
int main()
{
a text;
text.bb();
......
......
}
p1->p2=new a;这个语句是否就是把NEW得的地址赋给p2?
现在p1的值不变,P2的值会随着每次NEW改变,另通过COUT输出p1->p2的值与P2一样变化的.
如果把bb()函数里的语句改动一下,在每一次NEW的后面加上p1=p1->p2;的语句,如下:
p1->p2=new a(1);//第一次
p1=p1->p2;
p1->p2=new a(2);//第二次
p1=p1->p2;
p1->p2=new a(3);//第三次
p1=p1->p2;
这时P2的值只在第一次NEW时由NULL变为第一次NEW时的地址,而后两次P2的值没有变动,
同时P1因为P1=P1->P2;语句会三次改变其值,而通过COUT输出P1->P2的值却始终为0;
不知道何故,该怎样理解P1->P2的含义,为什么会有上面这些情况的输出,希望高手帮我分析一下, |
|