2015-04-02 64 views
0

我有3个文件:main.cnode.c,在node.h初始化一个简单的列表

我“node.h`我有:

typedef struct Lista Lista; 
node.c

我有:

#include "node.h" 
struct Lista{ 
     int dado; 
     Lista* prox; 
}; 

在我的main我有:

#include "node.h" 
#include "<stdlib.h>" 

main{ 
    Lista* p; 
    return 0; 
} 

P值是:

我的清单或第一个元素的指针进入我的列表的第一个元素? 因为我可以访问:
p->dado(列表的第一个值)和
p->prox(指向我的列表的第二个元素的指针)。

在哪里the pointer that points to the first element of the list

+1

[关于单链表的简单教程](http://www.cprogramming.com/tutorial/c/lesson15.html)。 – 2015-04-02 19:13:48

+0

这不可能编译。 – 2015-04-02 19:25:11

回答

3

p是未初始化的指针。解引用它是未定义的行为。在你分配内存并指向p之前,你没有列表。一旦确实分配了内存并指向p,则p是指向列表元素的指针。无论是第一个还是仍然如此,都取决于你做了什么。

+0

所以如果我使用'malloc()'为'p'分配内存。它将是一个分配的指针,它具有'p-> data; P-> nextElement'。那么'p'不会是我名单中的第一个元素?或者我只是使用'p-> nextElement'指向另一个将成为我的第一个元素的指针? – PlayHardGoPro 2015-04-02 19:22:50

+0

通常有一个头部变量。 – 2015-04-02 19:26:41

+0

@FiddlingBits这就是'头变量'这个词。我的'头脑'? – PlayHardGoPro 2015-04-02 19:27:21

2

p是指向列表中第一个元素的指针。 p->(something)用于获取它所指向的变量的值。

1

正如你写的代码不会编译。

在你的头文件,你可以创建你的结构为:

typedef struct Lista{ 
    int dado; 
    struct Lista *prox; 
}LISTA; 

然后在你的.c,请使用以下行来创建LISTA实例化和指针LISTA:

LISTA *pL, l;//create instantiation and pointer to LISTA 
pL = &l; //initialize pL to an instantiation of LISTA 

pL = malloc(sizeof(LISTA));//assign space to pointer to LISTA 

后这些步骤pL指向您的结构实例化的开始,拥有内存(空间)并提供从成员位置访问值的参考:

pL->dado; 
pL->prox; //also needs to be initialized and given space before use 

完成使用时请记住free(pL);