gpt4 book ai didi

c - c中的链表实现

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:43 24 4
gpt4 key购买 nike

我是 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;
~~~~~~~~~~~~~~~~~~ ^

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

这里的emptyList不是一个指针吗?因为我将其声明为 LinkList* emptyList。所以如果 emptyList 是一个指针,那么 *emptyList 指的是实际的结构节点。

当我删除以下行中的 * 符号时,错误消失了。它变成:

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

我也很困惑:

之间有什么区别
LinkList* emptyList = malloc(sizeof(LinkList*));

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

它们都编译得很好。

非常感谢。

最佳答案

sizeof(Something *) 通常给你 4 个字节(作为地址),这是一个地址的大小。

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

请注意,正如 Jonathan Lefler 所指出的,地址大小取决于操作系统架构。它可以通过(位数/8(一个字节的大小))来计算。因此,在 32 位上,地址有 4 个字节长,而在 64 位上,地址可能有 8 个字节长。

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

关于c - c中的链表实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26682179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com