指针链表能用数组方式访问吗?神奇呀解决方案

指针链表能用数组方式访问吗?神奇呀
各位大侠:有段代码好像是指针链表能用数组方式访问,求解惑:
注:以下引用的程序为p2p开源项目源码,代码本身没有问题,编译后可正常运行。
1、变量类型定义
struct   ServerDesc
{
int   flag;
int   sock;
int   type;
int   cur;
int   max;
int   maxid;
struct   Session   *head;
int   (*init)   (int   listnum);
int   (*process)   (int   listnum);
int   (*closure)   (int   listnum);
};
struct   Session
{
int   type;
int   socket;
unsigned   int   host;
unsigned   int   port;
unsigned   int   numjob;
struct   JobDes   *head;
struct   Channel   *pc;
struct   Edge   *header;
struct   Session   *next;
};
struct   ServerDesc   TRACKER[MAX_TYPE];

2、部分代码段
while   (TRACKER[type].maxid   ==   listnum   &&   TRACKER[type].head[listnum].socket   ==   0   &&   listnum   >   0)
{
listnum   --;
TRACKER[type].maxid   --;
}
3、我的问题
在serverdesc定义中head定义为struct   Session   *head;
head没有被定义成数组呀,怎么可以当数组用呀?
谢谢赐教!!

------解决方案--------------------
数组==指针
------解决方案--------------------
数组不过是一块指定大小的内存,数组名是这个空间的开始地址,指针可以指向任何内存中的地址,当把数组名符值给指针是,可以用指针引用数组了
------解决方案--------------------
请问楼上的那TRACKER[type].head[listnum]指向的是哪里?
head在这里是一个结构体Session的指针,本身结构体数组TRACKER[MAX_TYPE]在内存排列中就该是把这Session不连续排列,而是按ServerDesc排列,那请问TRACKER[type].head[listnum]指向的能是Session的结构吗?
------解决方案--------------------
对任意类型 T,有 T *p 或 T arr[],且有整数 n

p[N] 等价于 *(p + N)
p[-N] 等价于 *(p - N)
arr[N] 等价于 *(arr + N)
------解决方案--------------------
即使是链表也有两种存储方式的,
第一种是最简单的,顺序存储---这样的方式的存储的话,那么就可以用数组下表方式、头指针增加偏移量等的方法来访问,
第二种是链式存储,这种方法来存储的话,就会出问题了,
出什么问题,和操作系统,编译平台有关了吧,