指针链表能用数组方式访问吗?神奇呀解决方案
指针链表能用数组方式访问吗?神奇呀
各位大侠:有段代码好像是指针链表能用数组方式访问,求解惑:
注:以下引用的程序为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)
------解决方案--------------------
即使是链表也有两种存储方式的,
第一种是最简单的,顺序存储---这样的方式的存储的话,那么就可以用数组下表方式、头指针增加偏移量等的方法来访问,
第二种是链式存储,这种方法来存储的话,就会出问题了,
出什么问题,和操作系统,编译平台有关了吧,
各位大侠:有段代码好像是指针链表能用数组方式访问,求解惑:
注:以下引用的程序为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)
------解决方案--------------------
即使是链表也有两种存储方式的,
第一种是最简单的,顺序存储---这样的方式的存储的话,那么就可以用数组下表方式、头指针增加偏移量等的方法来访问,
第二种是链式存储,这种方法来存储的话,就会出问题了,
出什么问题,和操作系统,编译平台有关了吧,