数据结构建立空链表问题
如图,按照课件教学,建立空链表代码报错,但是从网上网友写的代码拿去编译却能通过,所以到底哪个是对的,没搞懂加*和不加*到底具体区别在哪 你那个Linklist 本来就是一个指针了,在Linklist函数中传递参数仍然用L->next,明显错了,L->next相当于二级指针了,这时必须还是用(*L) 来才可以,不然传参数的时候就用L,就不要用*L。 贴代码 超凡天赐 发表于 2017-6-5 18:56贴代码
代码都在图里 Jugeun_So 发表于 2017-6-5 20:43
代码都在图里
问问题是一定要注意,没有人给你一个一个输 SmallDream 发表于 2017-6-5 17:31
你那个Linklist 本来就是一个指针了,在Linklist函数中传递参数仍然用L->next,明显错了,L->next相当于二 ...
如果参数是L,那不就是值传递吗,值传递方法结束后没有用啊,要引用传递必须得*L 超凡天赐 发表于 2017-6-5 20:45
问问题是一定要注意,没有人给你一个一个输
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int elem;
struct Node *next;
}Node, *LinkList;
void InitList(LinkList *L)
{
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
}
void main()
{
LinkList L = NULL;
InitList(&L);
}
谢谢提醒,代码复制下来了 Jugeun_So 发表于 2017-6-5 20:55
#include
#include
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int elem;
struct Node *next;
}Node;
void InitList(Node *L)
{
L = (Node *)malloc(sizeof(Node));
L->next = NULL;
}
int main()
{
Node *L = NULL;
InitList(L);
return 0;
}
加*就是指针,不加就不是指针。有什么不会的再问。 超凡天赐 发表于 2017-6-5 22:28
加*就是指针,不加就不是指针。有什么不会的再问。
你这不是值传递吗,建立空链表不是要引用传递才行?不然方法结束没有效果 本帖最后由 超凡天赐 于 2017-6-6 22:36 编辑
Jugeun_So 发表于 2017-6-6 13:01
你这不是值传递吗,建立空链表不是要引用传递才行?不然方法结束没有效果
亲,你写的代码有一些语法错误。我不知道你说的什么意思? 本帖最后由 Jugeun_So 于 2017-6-6 18:36 编辑
超凡天赐 发表于 2017-6-6 16:58
你写的代码这么多语法错误。我知道你干什么的?
我只是没搞懂为什么我那个代码的方法体里的L要加*变成*L,其他哪有语法错误 Jugeun_So 发表于 2017-6-6 18:35
我只是没搞懂为什么我那个代码的方法体里的L要加*变成*L,其他哪有语法错误
我回答下你把 你的LinkList本身已经是指针类型了,但是这里函数定义是LinkList *L 指向指针的指针,为了获取原先指针的值就必须使用*解释指向指针的指针 超凡天赐 发表于 2017-6-6 16:58
你写的代码这么多语法错误。我知道你干什么的?
哥们淡定点.新人难免有错误,谁都是这样过来的,有语法错误很正常,即使写代码多年也难免的 lumber2388779 发表于 2017-6-6 22:22
哥们淡定点.新人难免有错误,谁都是这样过来的,有语法错误很正常,即使写代码多年也难免的
好,我改一下 Jugeun_So 发表于 2017-6-5 20:55
#include
#include
亲,刚刚言重了,sorry。我来说你第一处错误
typedef struct Node
{
int elem;
struct Node *next;
}Node, *LinkList;
这些你用了typedef进行替换,这里你写的Linklist其实是用来定义了一个结构体二维指针。所以你下面的代码
L = (LinkList)malloc(sizeof(Node));
malloc函数返回的只不过是一个一维指针,所以这里错了。
如果我们把Linklist前面的*去了。还是错,为什么?
L = (LinkList)malloc(sizeof(Node))
malloc返回了一个指针,我们要把它强制转化为Linklist指针类型,而不是Linklist类型。所以我们将它改为
L = (LinkList *)malloc(sizeof(Node));
但还是有错误,比如
LinkList L = NULL;
L是LinkList类型,怎么能赋值为NULL呢?所以我将你的改为
LinkList *L = NULL;
InitList(L);
下面的取址符也给你去掉了。
还有你这段代码有个多余的Node,看下面你的代码,尽管你这些对,但不好:
typedef struct Node
{
int elem;
struct Node *next;
}Node,LinkList;
所以我讲你错的多,你不要生气。你就写了这几行代码,结果我都给你改完了。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int elem;
struct Node *next;
}Node,LinkList;
void InitList(LinkList *L)
{
L = (LinkList *)malloc(sizeof(Node));
L->next = NULL;
}
int main()
{
LinkList *L = NULL;
InitList(L);
return 0;
}
很简单的一个事情。 本帖最后由 Jugeun_So 于 2017-6-7 15:07 编辑
超凡天赐 发表于 2017-6-6 23:00
亲,刚刚言重了,sorry。我来说你第一处错误
这些你用了typedef进行替换,这里你写的Linklist其实是用 ...
朋友很感谢你能帮忙,但是,我对你改的代码有疑问
你这样传指针L进去,方法结束不是依旧没有建立到空链表吗?
你这样写相当于是值传递,方法结束后没有效果,要引用传递才行,意思就需要指针的指针。
不知道我这么说对不对
本帖最后由 超凡天赐 于 2017-6-7 16:52 编辑
Jugeun_So 发表于 2017-6-7 14:43
朋友很感谢你能帮忙,但是,我对你改的代码有疑问
你这样传指针L进去,方法结束不是依旧没有建立 ...
我民白你的意思了{:10_266:}
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int elem;
struct Node *next;
}Node,*LinkList;
void InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
int main()
{
LinkList L = NULL;
InitList(&L);
return 0;
}
改好了,改好了。{:10_298:}
页:
[1]