Я недавно пытался узнать C/C++. Я написал простую связанную программу списка, которая должна работать, и на самом деле это происходит, но только тогда, когда заголовок связанного списка (node* mother
) является глобальной переменной и не используется в качестве параметра для функции (void new_node(int number)
) - эта функция является конструктором (Я использую синтаксис C).C++ global vs локальная переменная как заголовок в связанном списке
Эта программа ниже работает отлично, но я не могу создать более одного связанного списка:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct node {
node * next;
int number;
};
node * mother = NULL;
void new_node(int number)
{
node * newNode = (node*) malloc(sizeof(node));
newNode -> next = NULL;
newNode -> number = number;
if (mother == NULL){
mother = newNode;
}
else{
node* temp = mother;
while(temp->next != NULL){
temp = temp->next;
}
temp->next = newNode;
}
}
void destroy(){
node* ntemp = mother;
mother = NULL;
node* t;
while(ntemp != NULL){
t = ntemp->next;
free(ntemp);
ntemp = t;
}
}
void printAll(){
node *tmp;
tmp = mother;
while (tmp != NULL){
cout <<"value is : " << tmp->number <<endl;
tmp = tmp->next;
}
}
int main()
{
cout <<"size is " << sizeof(node*) <<endl;
new_node(5);
new_node(17);
new_node(-54);
new_node(3);
new_node(4);
new_node(-24);
new_node(10);
printAll();
return 0;
}
И если я использую однако node* mother
в качестве аргумента функционировать new_node
, она не работает - это только печатает размер узла:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct node {
node * next;
int number;
};
void new_node(node* mother, int number){
node * newNode = (node*) malloc(sizeof(node));
newNode -> next = NULL;
newNode -> number = number;
if (mother == NULL){
mother = newNode;
}
else{
node* temp = mother;
while(temp->next != NULL){
temp = temp->next;
}
temp->next = newNode;
}
}
void destroy(node * mother){
node* ntemp = mother;
mother = NULL;
node* t;
while(ntemp != NULL){
t = ntemp->next;
free(ntemp);
ntemp = t;
}
}
void printAll(node * mother){
node *tmp;
tmp = mother;
while (tmp != NULL){
cout <<"value is : " << tmp->number <<endl;
tmp = tmp->next;
}
}
int main()
{
node * mother = NULL;
cout <<"size is " << sizeof(node*) <<endl;
new_node(mother, 5);
new_node(mother, 17);
new_node(mother, -54);
new_node(mother, 3);
new_node(mother, 4);
new_node(mother, -24);
new_node(mother, 10);
printAll(mother);
return 0;
}
ВЫХОДА ПЕРВОЙ ПРОГРАММЫ:
size is 8
value is : 5
value is : 17
value is : -54
value is : 3
value is : 4
value is : -24
value is : 10
ВЫВОД ВТОРОЙ ПРОГРАММЫ:
size is 8
Вопрос в том, почему эта программа ведет себя так по-разному?
Не кричите нам, пожалуйста. –
Что показывает вам ваш отладчик? – StarPilot
Спасибо, что ответили ребятами. Ты мне очень помог - я не хотел кричать - просто выражение моего разочарования - я обязательно сделаю это спокойно в следующий раз :). –