2015-09-24 4 views
0

Я новичок в указателях, и есть этот код для объединения связанных списков. И здесь он объявил фиктивный узел как struct node dummy;, а следующий узел для фиктивного узла - NULL, поэтому для его установки мы используем dummy.next = NULL;.В чем разница между '->' между узлом struct и узлом struct *?

/* Link list node */ 
struct node 
{ 
    int data; 
    struct node* next; 
}; 
struct node* SortedMerge(struct node* a, struct node* b) 
{ 
    /* a dummy first node to hang the result on */ 
    struct node dummy;  

    /* tail points to the last result node */ 
    struct node* tail = &dummy; 

    /* so tail->next is the place to add new nodes 
    to the result. */ 
    dummy.next = NULL; 
//Code continues... 
} 

Я понимаю, что я могу использовать его, если он был struct node *dummy; , но мы не можем использовать его здесь, поскольку это не является узлом указатель. Так что мой вопрос, почему нет dummy->next = NULL здесь? и какая разница между узлом struct и узлом struct * ??

+3

Dummy не является указателем, поэтому '->' не работает. '->' предназначен только для указателей. – juanchopanza

+0

Итак, в основном вы задаете разницу между указателем и нормальной переменной? – ameyCU

ответ

3

a -> b является сокращением на (*a).b.

Если a не указатель, *a недействителен, и ни один из них не является a -> b.

1

Я понимаю, что я могу использовать его, если он был struct node *dummy;

Если под «это» вы имеете в виду struct node dummy; то ответ нет. Вы не можете использовать указатель на node так же, как указатель на node.

Так что мой вопрос, почему нет dummy->next = NULL здесь?

Поскольку dummy является node, а не указатель, а оператор -> если для указателей. Выражение dummy->next имеет ту же семантику, что и (*dummy).next.

1

. Поэтому мой вопрос в том, почему здесь не работает dummy-> next = NULL? и какова разница между узлом struct и узлом struct *?

Заявленный как это struct node dummy;

dummy->next=NULL не работает, потому что dummy не является указателем на структуру.

Если вы пишете так -

struct node A; // then A is a struct variable which can access struct members using '.' operator 

и это -

struct node* B; // then B is a pointer to struct node which can access struct member using '->` or like this (*B).data=something. 
2

dummy не является указателем на структуру. Это сама структурная переменная. Вы можете разглядеть атрибуты структуры с помощью оператора ->, только если это указатель на структуру.

Если вы используете структурную переменную, то . - это путь, который имеет очень большое значение с dummy.

Смежные вопросы