69,373
社区成员
发帖
与我相关
我的任务
分享
typedef ListItem *addr;
typedef struct indlist *List;
typedef struct indlist{
int n;
int maxsize;
addr *table;//将addr替换一下,就是 ListItem **table ,就是一个指向 ListItem* 的指针.指针的指针而已.
//一般情况下,使用指针的指针的目的是, table 指向一个 ListItem* 数组 , 这个数组里面每一个元素
//都指向一个真实的 ListItem .
// 事实上,你的这端代码正是这个意思,明白了这个,下面的2个问号也就不需要问了.
}Indlist;
List ListInit(int size)
{
List L=malloc(sizeof*L);
L->n=0;
L->maxsize=size;
L->table=malloc(size*sizeof(addr));//分配 ListItem* 的数组空间,这个数组总共有 size 个元素.
// 这个数组里面每一个元素都是 addr , 即ListItem* ,也就是指向 ListItem 的指针.
//额外说一句: 由于 addr 实际上是 ListItem* ,是一个指针,所以, sizeof(addr)=4 ...
return L;
}
ListItem ListRetrieve(int k,List L)
{
if(k<1||k>L->n)Error("out of bounds");
return *L->table[k-1];//返回一个ListItem. 还记得 table 实际上是 ListItem** 吧?
// 那么, L->table[k-1] 就可以找到 table这个指针指向的数组里面的 第 [k-1] 个元素(也是 ListItem指针)
// 然后,通过一个 * 运算,就得到实际的 ListItem 的值了.
}