繁体   English   中英

C中的链表实现

[英]linked list implementation in c

我是c语言的新手,今天我正在尝试在c语言中实现链接列表。

我只有一个函数调用createEmptyList()

# include <stdio.h>
# include <stdlib.h>
# include <time.h>



typedef struct Node
{
    int head;
    struct Node *next;
}LinkList;

LinkList* createEmptyLinkList(){
    LinkList* emptyList = malloc(sizeof(LinkList*));
    (*emptyList)->head = 0;
    (*emptyList)->next = NULL;

    return emptyList;
}

我正在尝试使用指针初始化第一个节点。 但是,当我编译时,出现以下错误:

linkedListImple.c:115:14: error: member reference type 'LinkList'
      (aka 'struct Node') is not a pointer; maybe you meant to use '.'?
        (*emptyList)->head = 0;
        ~~~~~~~~~~~~^~
                    .
linkedListImple.c:115:21: error: expression is not assignable
        (*emptyList)->head = 0;
        ~~~~~~~~~~~~~~~~~~ ^
linkedListImple.c:116:14: error: member reference type 'LinkList'
      (aka 'struct Node') is not a pointer; maybe you meant to use '.'?
        (*emptyList)->next = NULL;
        ~~~~~~~~~~~~^~
                    .
linkedListImple.c:116:21: error: expression is not assignable
        (*emptyList)->next = NULL;
        ~~~~~~~~~~~~~~~~~~ ^

我真的很困惑,即使我认为我在这里犯了一个非常基本的错误。

是不是在这里列出指针? 因为我将其声明为LinkList * emptyList。 因此,如果emptyList是一个指针,则* emptyList是指实际的struct节点。

当我在以下几行中删除*号时,错误消失了。 它成为了:

    (emptyList)->head = 0;
    (emptyList)->next = NULL;

我也很困惑:两者之间有什么区别

LinkList* emptyList = malloc(sizeof(LinkList*));

LinkList* emptyList = malloc(sizeof(LinkList));

他们都编译良好。

非常感谢你。

sizeof(Something *)通常为您提供4个字节(作为地址),即地址的大小。

sizeOf(Something)为您提供对象的大小-在您的情况下,head(sizeof(int))可能是4个字节,指针(sizeof(address)-4个字节-假设您在这里的环境很多)。

请注意,正如乔纳森·莱夫勒(Jonathan Lefler)指出的那样,地址大小取决于OS体系结构。 可以通过(位数/ 8(字节的大小))来计算。 因此,在32位上,地址长4个字节,而在64位上,地址长可能是8个字节。

当您说(* SomeObject)表示指向时,您是在引用对象本身,因此可以使用(* SomeObject).property
当您具有对象的指针时。 您可以使用箭头SomeObject-> property。 这将获取SomeObject的引用并在其上找到一个“属性”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM