链表的实质就是指针。存放下一个元素的地址。
typedef struct spy
{
char * name ;
struct spy * next;
}spy ,*p_spy;
spy A ={'A',NULL};
spy B ={'B',NULL};
spy C ={'C',NULL};
int main()
{
p_spy =&A;
A.next=&B;//A是一个结构体变量,A.next是对这个结构体变量的引用。next本身是一个结构体变量的指针,所以next只能赋值结构体变量的地址。即将B的地址赋值给next。
B.next=&C;
C.next=NULL;
while(p_spy )
{
printf("%s\r\n",p_spy->name);
p_spy=p_spy->next;
}
};
首次执行,p_spy保存了结构体变量A的地址,所以首次执行p_spy->name打印A;执行
p_spy=p_spy->next;后,结构体指针p_spy保存了下一个结构体变量的地址。p_spy依然不等于0,第二次打印了B……第三次打印了C。
内存分布图