Форум программистов, компьютерный форум, киберфорум
Наши страницы

Что не так с этими указателями? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Прервать цикл из цикла, вложенного в него http://www.cyberforum.ru/cpp-beginners/thread1801790.html
Приветствуют. Собственно, вопрос в названии темы. for(int i = 1; i <= 10; i++) for(int j = 1; j <= 5; j++) { if(/* здесь условие выхода из обоих циклов */) { /* как выйти сразу из 2-х...
C++ Тест. Подскажите где ошибка 1 ответ не правильный. Подскажите где ошибка. http://www.cyberforum.ru/cpp-beginners/thread1801758.html
C++ Typedef thiscall метода с переменным числом аргументов
Добрый день. Хочу что то типа такого typedef void *(__thiscall *tThisCall)(void *, ...); tThisCall method; //... method(object, arg1, arg2);
C++ Создание просто словаря, не выполняется поиск
Пример взят из книги, но работать он не хочет. Проверял цикл for, выдает значение 012.(Не совсем понятно от куда что, ладно 2 цифры но их 3) Думаю что что то не так с if (!strcmp(a, word)), раньше...
C++ Посоветуйте библиотеки/фреймворки/технологии для интерактивной управляемой графической визуализации http://www.cyberforum.ru/cpp-beginners/thread1801718.html
Для начала простейшая задача - хочу, чтобы прямоугольник плавно, без отставаний и дерганий сопровождал перемещение курсора мыши, и при этом по какому-нибудь событию (таймеру или WM_MOUSEMOVE или еще...
C++ Компиляция в mvs Приветствую всех. У меня установлен Microsoft Visual Studio 2015. Как скомпилировать C++ программу, которая не использует .NET, чтобы на компьютере, где отсутствует .NET не требовало установку... подробнее

Показать сообщение отдельно
AJITAC
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 10

Что не так с этими указателями? - C++

02.09.2016, 09:58. Просмотров 207. Ответов 5
Метки (Все метки)

Всем привет, прошу помощи разобраться в коде. Недавно начал изучать C++ по книге Лафоре. В главе с указателями есть пример со связными списками. Вот его структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct node {
    int data;
    node* next;
};
class linklist{
    private:
        node* first;
    public:
        linklist() {
            first = NULL;
        }
        void add(int);
        void show();
};
Читателю предлагается написать функцию add(int) таким образом, чтобы она добавляла новый элемент в конец списка. Написал свою функцию и для проверки решил спросить у Гугла, нашел эту самую функцию, но не смог в нее. Вот собственно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void linklist::add(int d)         
{   
    node* newlink = new node;          
    node* curr;                                 
    newlink->data = d;                 
 
    if(!first)
    {
        newlink->next = NULL;             
        first = newlink;
    }
 
    for ( curr = first; curr->next != NULL; curr = curr->next);
 
    curr->next = newlink;
    cout << curr->next << "\n";    //это мое
 
    newlink->next = NULL;        
    cout << curr->next << "\n";    //и это
}
Вначале возник вопрос, почему при добавлении первого символа, он не дублируется в списке. Ведь мы добавляем его в строках:
C++
1
2
       
first = newlink;
И здесь:
C++
1
curr->next = newlink;
Решил проверить адреса, на которые ссылаются указатели curr->next (две добавленные мною строки вывода) и при добавлении первого элемента получил разные адреса (что интересно, при добавлении последующих элементов, адреса выводит одинаковые). Объясните, пожалуйста, почему адреса разные, если в этом участке кода:
C++
1
2
3
4
5
curr->next = newlink;
cout << curr->next << "\n";    //это мое
 
newlink->next = NULL;        
cout << curr->next << "\n";    //и это
мы не изменяем указатель curr->next?
И почему всё-таки при добавлении первого элемента он не дублируется?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.