2015-08-21 3 views
2

Я объявляя структуру здесьразница между указателем структуры и элементом указателя структуры

struct node 
{ 
    int data; 
    struct node *next; 
}; 

Я создаю указатель с этой декларацией

struct node *link; 

Есть ли разница между next и link указателем или являются ли они одним и тем же типом указателя?

+5

Конечно, они имеют одинаковый * тип данных *. Ты их так объявил! Оба они указывают на адрес типа данных 'struct node'. –

+2

Что заставляет вас думать, что существует разница? –

+0

@MichaelWalz Я чувствую себя как разница, потому что следующий указатель объявляется, когда структура не определена полностью, а указатель ссылки объявлен, когда структура полностью определена. – kapil

ответ

0
struct node 
{ 
    int data; 
    struct node *next; 
}; 

struct node *link 

* следующий и * ссылка оба указателя, поэтому их размер будет таким же. Тип данных, на которые они указывают, одинаковый, структура node. Но они совершенно разные:

struct node *p = malloc(sizeof (node)); //allocate memory for a new node 

//now, p will point to an address. 
//p->next is still un-initilized, so we have to assign it an address 

p->next = NULL; 

p, and p->next point to different addressess 

Таким образом, два указателя отличаются друг от друга и существуют независимо друг от друга. На самом деле, * ссылка не должны даже быть указатель, вы можете статически выделить память для узла:

struct node p; 
p.next=NULL 

Или вы можете добавить другие указатели на узел в структуре узла для более сложных структур данных, таких как деревья или двойные связанные списки:

struct node 
{ 
    int data; 
    struct node* next; 
    struct node* prev; 
} 
+0

будет p-> данные и точка p указывают на тот же объект? – kapil

+0

нет, они не будут! – Pandrei

+0

, но адреса одинаковы, см. этот http://ideone.com/D1qeSN – kapil

2

Существует одно отличие.

Указатель ссылки может иметь начальное значение, но следующий указатель не может иметь начальное значение и причина:

Всякий раз, когда мы объявляем структуру, мы объявляем новый тип, а не новые переменные.

Так

struct node *link=NULL; 

допускается в то время как

struct node 
{ 
    int data; 
    struct node *next=NULL; 
}; 

не допускается.

+0

ответ на самом деле не затрагивает вопрос и довольно вводит в заблуждение. Это не разница между двумя указателями! – Pandrei

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