我是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));
他们都编译得很好。
非常感谢。
答案 0 :(得分:-2)
sizeof(Something *)通常为您提供4个字节(作为地址),这是地址的大小。
sizeOf(Something)为您提供对象的大小 - 在您的情况下,head(sizeof(int))可能是4个字节,指针可能是4个字节(sizeof(地址)) - 假设您的环境很多这里)。
请注意,正如Jonathan Lefler所指出的,地址大小取决于操作系统架构。它可以通过(位数/ 8(字节大小))来计算。因此,在32位上,地址长4个字节,在64位上,它们可能长8个字节。
当你说(* SomeObject)意思是指向时,你正在引用对象本身,所以你可以使用(* SomeObject).property
当你有对象的指针。您可以使用箭头SomeObject-&gt;属性。这将获得SomeObject的引用并找到&#34;属性&#34;在它上面。