使用指针遍历数组的链表

时间:2016-11-30 11:29:33

标签: c pointers struct linked-list sizeof

我是C编程新手,

char a[100];
struct LinkedList {
    size_t size;
    int free;
    struct LinkedList *next; 
};

struct LinkedList *freeList = (void *) a;

上面的代码用于创建结构类型链表,以便遍历名为'a'的char数组。我只是想知道代码中struct LinkedList *freeList = (void *) a;会发生什么,我想知道Linkedlist结构的大小

3 个答案:

答案 0 :(得分:0)

声明一个本地指针并将其指定给头指针,然后通过整个数组运行它,然后你将通过数组中的每个元素。

 int traverse(struct LinkedList* head) {

  struct LinkedList* it = head;
  int size = 0;

  while(it != NULL) {
    size++;
    it = it->next;
  }

  return size;
}

答案 1 :(得分:0)

对于您的查询: -

我只想知道struct LinkedList *freeList = (void *) a会发生什么;在代码中

什么都不会发生。它会正常工作,你的结构指针将指向数组的基地址。

我想知道Linkedlist结构的大小。

如果您尝试printf("%zu\n", sizeof(struct LinkedList));,它可能会打印24,顺便说一下,结构大小取决于架构。

如果您尝试使用struct LinkedList *freeList1; printf("%d\n", sizeof(freeList));可能会给你8(64位机器)。

答案 2 :(得分:-2)

要查找链表中的元素数,可以按照上述方法操作。但要找到链表的大小,

char a[100];
struct LinkedList {
    size_t size;
    int free;
    struct LinkedList *next;
};

struct LinkedList *freeList = (void *)a;

int main()
{
    struct LinkedList l;
    std::cout << sizeof(l) << endl << sizeof(l.size) << endl << sizeof(l.free) << endl << sizeof(l.next);
    std::cout << endl << "size of freelist : " << sizeof(freeList);
    _getch();
}

你不能拥有struct LinkedList * freeList =(void *)a;你会收到一个错误

  

错误C2440:'初始化':无法从'void *'转换为'LinkedList '   注意:从'void '转换为指向非'void'的指针需要显式转换

希望这有帮助。