在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/

10-11 04:26