我是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
结构的大小
答案 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'的指针需要显式转换
希望这有帮助。