在C中实现了一个单一的链表。
struct node
{
int data;
struct node *next;
};
struct list_el {
int val;
struct list_el * next;
};
typedef struct list_el item;
void main() {
item * curr, * head,*track;
int i;
head = NULL;
for(i=1;i<=10;i++) {
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next=0;
if(head!=NULL)
head->next = curr;
head = curr;
}
curr = curr-10;
while(curr) {
printf("%d\n", curr->val);
curr = curr->next ;
}
}
由于列表中有10个元素,所以为了使指针指向第一个元素,我尝试将curr(指向struct的指针)减少10,但这使我在列表中完成了一半,打印的值是
5,6,7,8,9,10
。结构的大小是4,而指针的大小是2,指针似乎减少了2*10=20字节而不是40字节,这正常吗(当我读到指针根据其类型的大小递增/递减时)
最佳答案
不能对链接列表使用指针算术:这些项是单独分配的(使用malloc),因此它们在内存中不一定相邻这种方法只适用于数组。
关于c - 指向结构增量的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8804605/