c语言的问题

只要有->就是下一个节点地址?所以链表里面p=L->next和p=p->next其实是一个意思对吧,都是l的下个节点或者p的下个节点,箭头不是赋值是往后跳对吗?我是菜鸟

第1个回答  2015-09-06
肯定不是一样的,假设L是第一个节点,p = L->next始终代表第二个节点,但是p = p->next是一直随着循环第二个、第三个……节点!这里的p是变动的追问

我知道你什么意思我的意思是他这样设计的原理是结构体中所有元素的地址是相连接的吗?然后只要有箭头都是跳下一个节点对吗?所以p = L->next实际上是把L之后元素地址的指针域指针付给p是这样吗

第2个回答  2015-09-06
p=L->next是把L->next所指的节点赋给p,
p=p->next是把p->next所指的节点赋给p,
如果L->next所指节点等价于p->next所指节点,则上两者等价,
如果L->next所指节点不等价于p->next所指节点,则上两者不等价,
注意p=L->next与p->=L->next是不同的。(本人数据结构是大学时代学的,解释得可能会有错,请协同参考其他人的答案)
第3个回答  推荐于2016-10-11
(p=L->next和p=p->next)这里L和p我用m代替
这句话的意思就是取出m所指向的结构体中包含的数据赋值给p

当然,m是一个指针变量
举个例子
struct Data
{
int a;
struct Data * next;
};/*定义结构体*/
main()
{
struct Data * p;/*声明指针变量p*/
……
p = p->next;/*将next中的值赋给p*/
}追问

每循环引用一次p的值会不一样吗?和java里面的new一样?可是地址怎么会相连接哪

追答

p的值是next的值,next的值不变,p的值就不变。java我还不太了解

追问

那不变的话链表怎么做的

追答

前面我说的next代表的是一个值的情况下,而如果在一个循环中,例如
while(....)
{
.....
p=p->next ;
.....
}
那么这儿就是让p指向下一个元素节点

追问

哦,意思是不是循环每一次都是新的pnext而p还是上一轮的p,这样就一直往后走

本回答被提问者采纳
第4个回答  2015-09-06

->是结构体指针引用成员变量的运算符,如:

struct node {
     int  data;
     struct node *next;
} st, *pst=&st ; //定义一个普通结构体变量st和一个指针变量pst

st引用成员用.
st.data=100 ;
st.next=NULL;
pst引用成员用->
pst->data=99;
pst->next=NULL ;

本回答被网友采纳