* РЕДАКТИРОВАТЬ *
Я просто подумал, что добавлю перед моим ответом:
Стек, проще говоря, место, где находится ваша программав настоящее время работает и несколько временно.Я имею в виду, что ваша функция main () может вызывать другую функцию.Эта функция будет иметь свою собственную область видимости (область между {}), свои собственные локальные переменные, пробел и т. Д. Она, в свою очередь, может вызывать другую функцию.Эти функции продолжают помещаться «в стек».Как только функция вернется, она будет удалена из стека, и вы вернетесь к точке в функции повышения уровня следующего уровня, в которой вы начали.Это как если бы вы положили лист бумаги поверх вашей текущей тетради, сделали несколько заметок, а затем удалили его, чтобы вернуться на исходную страницу.«Переменные стека» - это те, которые вы создаете обычным способом внутри функции, и они умирают / разрушаются при выходе из области действия.
Переменные кучи - это статические / глобальные переменные или переменные, созданные с использованием «new, malloc,так далее."Эти переменные являются постоянными и будут сохраняться / существовать до тех пор, пока вы не вызовете их явно.Они выживут за пределами области, в которой они были созданы, и если вы не отследите их, их ресурсы будут недоступны, и у вас будет утечка памяти / ресурсов.
Normal Post
Строки:
struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;
все создают указатели * после того, как узел заявляет, что это указатель на узел.Эти указатели инициализируются как NULL или 0. Указатель - это просто адрес / местоположение в памяти, в нем еще нет объекта узла.Таким образом,
node* ptr = NULL; //creates pointer to a node object, but no node itself.
node obj; //creates an actual node object on the stack.
Указатели могут использоваться для указания на основанный на стеке объект, взяв его адрес с помощью оператора & следующим образом:
node obj; //Real object.
node* ptr = &obj; //ptr points to the "address of" obj.
В вашем случае указатель узла нене указывайте ни на что, пока вы не создадите это с "новым".После этого указатель указывает на «динамически выделенную» память, которая будет сохраняться вечно до тех пор, пока вы не вызовете «удалить» из нее.Преимущество этого в том, что память может сохраняться вне функции, в которой она создана.Итак:
void myFunction()
{
node obj;
} //obj dies here.
void myOtherFunction()
{
node* ptr = new obj;
} //the "node" created by new will survive after this.
Я мог бы продолжить, но вам нужно прочитать книгу на c ++ и понять это - указатели являются ключевым аспектом языка, который вам необходимо выучить полностью.