Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用指针遍历数组的Linkedlist_C_Pointers_Struct_Linked List_Sizeof - Fatal编程技术网

C 使用指针遍历数组的Linkedlist

C 使用指针遍历数组的Linkedlist,c,pointers,struct,linked-list,sizeof,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; 上面的代码用于创建结构类型linkedlist,以便遍历名为“a”的char数组。我只想知道从struct LinkedList*freeList=(void*)a,我还想知道链接列表结构的大小声明一个

我是C编程新手

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

struct LinkedList *freeList = (void *) a;

上面的代码用于创建结构类型linkedlist,以便遍历名为“a”的
char
数组。我只想知道从
struct LinkedList*freeList=(void*)a,我还想知道
链接列表
结构的大小

声明一个本地指针并将其分配给头指针,然后在整个数组中运行它,然后在数组中传递每个元素

 int traverse(struct LinkedList* head) {

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

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

  return size;
}
对于您的查询:-

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

什么也不会发生。它可以正常工作,并且您的结构指针将指向数组的基址

我想知道Linkedlist结构的大小。

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

如果您尝试使用struct
LinkedList*freeList1

printf(“%d\n”,sizeof(freeList))可能会为您提供8(64位机器)

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

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();
}
chara[100];
结构链接列表{
大小;
无整数;
结构链接列表*下一步;
};
结构LinkedList*自由列表=(void*)a;
int main()
{
结构链接列表l;

我只想知道我的代码在struct LinkedList freeList=(void)中发生了什么a、 代码segment@SunethPerera未定义的行为会发生。您好,请注意,由于大小如您所说取决于架构,因此无法确保它将打印
24
。这就是我编辑答案的原因。此外,您可以在网站的“帮助”部分了解有关降价的信息,这样可以提高网站的视觉质量和可读性你的答案。剩下的当然是好的品味。你是否关心你的答案的外观以及用户是否能清楚地阅读它是一个品味的问题。@inarob,谢谢你的编辑。关于大小,我已经在64位机器中加工过了,你将24位。如果不是完全明显的,这是为任何试图回答这个问题的人编写的。行:
struct链接列表*自由列表=(无效*)a;
在现代机器上的大多数情况下会导致未定义的行为,而取消引用
自由列表
总是会导致未定义的行为。@2501因为它不明显,也许你应该回答引用标准并解释为什么它是未定义的行为。我希望你有一个很好的理由用这种方式编程