2015-04-02 63 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);