快捷导航

C语言结构体,主要后面那个循环不懂

#include struct node{        int data;        struct node *next; } ; typedef struct node NODE; main() {         NODE a,b,c,*h,*p;         a.data=10;b.data=20;c.data=30;         h=&a;         a.next=&b;b.next=&c;c.next='\0';         p=h;         printf("%d\n",p->data);          while(p)        {                  printf("%d",p->data);                 p=p->next;                 printf("\n");         } }

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员2

所以你应该已经弄懂了 struct 的定义和 typedef 是怎么回事吧。


那么,在 main 中你定义了 a、b、c 这三个 NODE,并且让 a 链到 b,b 链到 c,c 的 next 指向“空”
虽然运行起来没有错,但额外说一下:c.next='\0' 这里你把 next 赋值为 '\0',这是“空字符”。而这里在逻辑上你需要的是让 next 为“空指针”(也就是让 next 的值为 0),那么直接赋值 0 或 NULL 就可以了。 因为 '\0' 的值也是 0,所以这里没有运行错误,但这么写逻辑上就有些混乱了。


h 和 p 是指针,h 指向 a,而 p 一开始也指向 a。


while 循环的条件是 p 不为空指针。那么一开始 p 指向 a,所以进入循环:
首先打印 p 指向的节点的 data 值。
然后 p = p -> next,这句就是让 p 指向下一个节点
如果某次循环时 p 已经指向最后一个节点了(这例子中就是 c),那么 p = p -> next 之后 p 就是空指针了(因为 c 的 next 是空指针,表明 c 为最后一个节点),再进入 while 时 p 为空指针,所以会结束循环。


那么整个 while 就是利用 p 指针,遍历了一遍 a b c 节点链接而成的链表(对,这样的结构就叫“链表”)
回复

使用道具 举报

嗯嗯typedef struct 我都理解了,只是这个循环我还是有点迷糊,为什么p的值会移动,会发生变化,还有–>这个符号的用法,具体作用什么?
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP