注册 登录
编程论坛 C++教室

c++链表的小问题!!

newCpp 发布于 2009-10-04 21:05, 446 次点击
程序代码:
#include <iostream>
using namespace std;
struct book
{
    int i;
    int j;
    struct book *nent;
};
int main()
{
book a,b,c,*p,*p1;
a.i=10;
a.j=4;
b.i=5;
b.j=7;
c.i=6;
c.j=400;
p=&a;
a.nent=&b;
b.nent=&c;
c.nent=NULL;
p1=p;
while(p1!=NULL)
{
    cout<<p1->i<<endl<<p1->j<<endl;
      p1=p1->nent;

}
return 0;
}

这段链表里面      p1=p1->nent;
为什么删除掉了p1=p1->nene;这句话就成为了死循环了?
这里面 p1=p1->nent;有什么用啊!
其他的我大概琢磨差不多了,但这句话想半天没想出来啥意思!!
谢谢,往高手指明一下!!
谢谢
4 回复
#2
最左边那个2009-10-04 21:55

由于p1=p这里P1指向了P
如果你删掉 p1=p1->nent(这里是改变P1的指向)这一句的话
那么P1永远都指向P,而P指向的a!=NULL,那么就会死循环下去了。

p1=p1->nent(这里是改变P1的指向),第一次P1指向p(也就是a),进入循环体里后,因为p1=p1->nent,那么P1就不再指向a了,而是指向b,依次类推!

#3
最左边那个2009-10-04 21:58
另外这里:struct book *nent,其实可以直接就book *nent,不用struct,你试试!当然用了也能编译成功

#4
jjg2009-10-07 22:36
另外这里:struct book *nent,其实可以直接就book *nent,不用struct,你试试!当然用了也能编译成功

是啊,我觉得很奇怪为什么还要用struct呢???struct和class类似,可是在书上从来都没有看过class book *nent这种表述啊,能不能解释一下
#5
最左边那个2009-10-08 19:26
struct book *nent,其实可以直接就book *nent,不用struct。
因为struct book以后,book就是一个类型标识符,它的性质和int double等一样的!所以前面不需要struct了
就好像int是一个类型标识符,直接就int a什么什么的!
也可以这么说吧,struct只是为了说明book,说明了一次以后,下次用的时候就不需要struct book了!
就好像int a,这个int只是为了说明a,你说明一下以后,下次要用a的时候,就不需要再int a来用,直接就用a。

哈,说的乱78糟,希望你能看明白!
1