Объявление указателя на NULL

#c #pointers #struct

#c #указатели #структура

Вопрос:

Когда я объявляю:

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

node *head = NULL;
  

Это что-то вроде:

 head = NULL;
  

или

 *head = NULL
  

Ответ №1:

Каждое объявление имеет следующий формат:

 Type varName = initializer;
  

В вашем случае

 node *     head          =   NULL;
 ^          ^                 ^
| Type |  | varName | = | initializer |;
  

Итак, head это переменная, тип которой node * (указатель на node ). Переменная — это то, head какое значение инициализируется NULL .

Ответ №2:

Я хотел бы расширить ответ Роберто.

Это

node *head = NULL;

не будет компилироваться, потому что node это не тип, на самом деле это переменная с struct str_node именем node . Если вы хотите определить тип, используйте typedef спецификатор, например

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

node *head = NULL;
  

Комментарии:

1. Да, извините, я неправильно скопировал код, но я написал его так же, как вы.

Ответ №3:

Определите указатель и установите его значение в NULL :

 int *head = NULL;
// conceptual    memory address    value
// head          0xABCD0000        0          
// that is;
// head is pointing to nowhere
  

Определите указатель, затем установите его значение в NULL :

 int *head;
head = NULL;
// conceptual    memory address    value
// head          0xABCD0000        0          
// that is;
// head is pointing to nowhere
  

Определите указатель, затем установите адрес памяти, на который он указывает, на 0 :

 int *head;
head = 0xDCBA0000; // or a "malloc" function 
*head = 0;
// conceptual    memory address    value
// head          0xABCD0000        0xDCBA0000          
// ...
// *head         0xDCBA0000        0
// that is;
// head is pointing to 0xDCBA0000
// and the value of the memory it's pointing at is set to zero
  

Ответ №4:

Добро пожаловать в SO! Это как head = NULL;