33,321
社区成员




//初始化
Status InitList_Sq(Sqlist *list) {
[code=c] list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
if ((*list).elem){
list->length = 0;
return OK;
}
//插入
p = &(*list).elem[index - 1]; //要插入的位置
EleType *end, *p;
end = &((*list).elem[list->length - 1]);
for (end = &((*list).elem[list->length - 1]); p <= end; end--){
*(end + 1) = *(end);
}
*p = e;
(*list).length++;
list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
end = &((*list).elem[list->length - 1]);
printf("The p address is: %d\n",p);
printf("The end address is: %d\n",end);
printf("The elem address is: %d\n",list->elem);
打印出来的地址为
The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的[/quote]
那么list->length的值是多少?p指向那里?是指向list->elem
我说end是值list->elem+LISTI_INIT_SIZE, p = list->elem,
[/quote]
end = &((*list).elem[list->length - 1]);
书上的尾指针指向的是这个,当表长为0的,插入的位置为1的时候,end的地址小于p的地址,怎么进行元素的后移呢?[/quote]
书上是对的,想明白了,后续还有个 *p = e 的操作
end = &((*list).elem[list->length - 1]);
printf("The p address is: %d\n",p);
printf("The end address is: %d\n",end);
printf("The elem address is: %d\n",list->elem);
打印出来的地址为
The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的[/quote]
那么list->length的值是多少?p指向那里?是指向list->elem
我说end是值list->elem+LISTI_INIT_SIZE, p = list->elem,
[/quote]
end = &((*list).elem[list->length - 1]);
书上的尾指针指向的是这个,当表长为0的,插入的位置为1的时候,end的地址小于p的地址,怎么进行元素的后移呢?
end = &((*list).elem[list->length - 1]);
printf("The p address is: %d\n",p);
printf("The end address is: %d\n",end);
printf("The elem address is: %d\n",list->elem);
打印出来的地址为
The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的[/quote]
那么list->length的值是多少?p指向那里?是指向list->elem
我说end是值list->elem+LISTI_INIT_SIZE, p = list->elem,
end = &((*list).elem[list->length - 1]);
printf("The p address is: %d\n",p);
printf("The end address is: %d\n",end);
printf("The elem address is: %d\n",list->elem);
打印出来的地址为
The p address is: 11013552
The end address is: 11013548
The em address is: 11013552
地址上end 小于 p的 list->elem = (EleType*)malloc(LISI_INIT_SIZE * sizeof(EleType));
list->elem 是在堆上申请的空间,长度就是LISTI_INIT_SIZE
首地址就是list->elem;尾地址为:list->elem + LISTI_INIT_SIZE
end指针是大于p的,p = list->elem,那么p是小于end的。因为end是高地址,p是低地址。
建议将p,list->elem,end的地址值打出来。