请问个程序

请教个程序
程序如下:
# include <stdlib.h>
#include <stdio.h>
struct NODE { int num;  struct NODE  *next; }
main ( )
{  struct NODE *p,*q,*r;
   p = ( struct NODE *) malloc (sizeof (struct NODE) );//动态构造了一块内存空间
   q = ( struct NODE * ) malloc (sizeof (struct NODE) );//动态构造了一块内存空间
   r = ( struct NODE * ) malloc (sizeof (struct NODE) );//动态构造了一块内存空间
   p->num = 10; q->num = 20; r->num = 30;  //给结构体赋值
   p->next = q; q->next =  r;  //这里是发送地址,还是发送地址内容?
   printf("%d\n",p->num+q->next->num); //最后就是这个运算迷糊了
}

帮忙说下这个程序是怎么算出来的,实在看不出来饿

------解决方案--------------------
借本数据结构学学吧! http://wenku.baidu.com/view/2c7f6458312b3169a451a4b4.html
------解决方案--------------------
引用:
引用:p->num+q->next->num
p->num就是10,q->next->num就是30啊
我自己算也是30啊,但是答案和编译时候是40,就是这点疑问


p->num是10,q->next->num是30,p->num+q->next->num是40