Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
iKapex
3 / 3 / 0
Регистрация: 07.10.2012
Сообщений: 228
#1

Стек и указатели - C++

09.03.2013, 12:19. Просмотров 924. Ответов 8
Метки нет (Все метки)

Есть элемент стека описанный в структуре:

C++
1
2
3
4
5
struct ElementOfStack
    {
         char info;    // здесь, как я поняла, находится информация о значении предыдущего элемента
         ElenentOfStack* prev; // здесь хранится указатель на предыдущий элемент. 
     };
Здесь более менее все понятно.

Но вот реализация, допустим, функции push мне непонятна совсем!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ElementOfStack *push (ElementOfStack** pTop, char value)
{
        ElementOfStack* newElementOfStack = new ElementOfStack; // здесь выделяем память под новый элемент стека
        newElementOfStack->info = value; // присваиваем переданное значение в поле info
        newElementOfStack->prev = *pTop; // указатель на вершину переходит в поле prev. НО! Почему???!!! в *pTop           
                                                          // звездочка??? Как это совместить с переданным значением в две звезды с  
                                                          // одной в этом присваивании я не понимаю :gcray2: что там будет в поле   
                                                          // prev понять не могу. это мне непонятно ([B]№1[/B]) 
 
 
     *pTop = newElementOfStack; // тоже непонятна звезда ([B]№2[/B])
 
      return newNode; // это, наверно, оправдывает почему при описании функции перед push тоже стоит звезда
}
Тему указатели я, в принципе, поняла. Но вот как совместить переданные формальные параметры с какими-то новыми
переменными и как подогнать эти типы - я не поняла. И объясните, пжл, зачем в формальном значение указатель на
вершину pTop с двумя звездами?

Кто-нибудь вытащите меня из танка
Всем заранее большое спс!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 12:19     Стек и указатели
Посмотрите здесь:

Задача на указатели и стек - C++
Задали строчную переменную, которая содержит последовательность символов, среди которых есть цифры. Составить программу, которая превращает...

Стек через указатели — ошибка доступа - C++
Задача такова: реализовать стек, в котором будут такие команды — push (добавить в конец элемент), pop (удалить последний элемент), back...

Стек - C++
Доброго времени суток! Начал изучать сегодня стеки и списки, со списками понял работу, а вот что-то про стеки было написано странно... как...

Стек - C++
Здравствуйте,помогите найти понятную реализую кода стека с объяснениями.заранее благодарю Добавлено через 27 секунд Не STL

Стек - C++
Добрый день(вечерь, ночь и утро-выбирайте сами). Вообще, я редко прибегаю к помощи другим, но этот случай меня вынудил))) обыскался по...

Стек - C++
Помогите сделать программу.Создать стек с числами в диапазоне от –50 до +50.Подсчитать, сколько элементов стека имеют значение, которое...

Стек - C++
Помогите с таким задание: Данное задание реализовать в виде стека. Все основные действия необходимые для решении задачи должны быть...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leoleshucov008
13 / 13 / 1
Регистрация: 23.02.2010
Сообщений: 221
09.03.2013, 12:31     Стек и указатели #2
C++
1
2
3
4
5
struct ElementOfStack
    {    
         char info;    // Здесь значение именно данного элемента, а не предыдущего
         ElenentOfStack* prev; // здесь хранится указатель на предыдущий элемент. 
     };
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ElementOfStack *push (ElementOfStack** pTop, char value)
{      
        //ElementOfStack** pTop - это указатель на указатель
        ElementOfStack* newElementOfStack = new ElementOfStack; // здесь выделяем память под новый элемент стека
        newElementOfStack->info = value; // присваиваем переданное значение в поле info
        newElementOfStack->prev = *pTop; // указатель на вершину переходит в поле prev. НО! Почему???!!! 
        //потому, что prev - указатель, *PTop - тоже указатель. 
                                                          
 
 
     *pTop = newElementOfStack; // //newElementOfStack - указатель, *PTop - тоже указатель. 
 
      return newNode; // это, наверно, оправдывает почему при описании функции перед push тоже стоит звезда
}
функция push может быть реализована так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
ElementOfStack *push (ElementOfStack* pTop, char value)
{      
      
        ElementOfStack* newElementOfStack = new ElementOfStack;
        newElementOfStack->info = value; 
        newElementOfStack->prev = pTop;
   
 
 
        pTop = newElementOfStack; 
 
      return newNode; //Думаю здесь хотели вернуть указатель на созданный элемент return pTop; 
}
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.03.2013, 12:34     Стек и указатели #3
1) все параметры функций копируются т.е. внутрь функции попадают копии параметров
2) хочешь внутри функции изменить параметр - передавай его по указателю (одна * звездочка при имени типа)
3) хочешь внутри функции изменить параметр - указатель - передавай его как указатель на указатель (две ** при имени типа)
Цитата Сообщение от iKapex Посмотреть сообщение
newElementOfStack->prev = *pTop;
pTop имеет тип указателя на указатель.
newElementOfStack->prev имеет тип указателя.
*pTop имеет тип указателя, звездочка перед pTop означает разыменованние указателя.
Leoleshucov008
13 / 13 / 1
Регистрация: 23.02.2010
Сообщений: 221
09.03.2013, 12:40     Стек и указатели #4
по поводу этой строчки
C++
1
 newElementOfStack->prev = *pTop;
Так мы даем знать текущему элементу, то где находится предыдущий. Это будет использоваться в функции - достать из стека.
iKapex
3 / 3 / 0
Регистрация: 07.10.2012
Сообщений: 228
09.03.2013, 13:51  [ТС]     Стек и указатели #5
Ребят, спасибо вам огромное. Я по ходу дела выхожу из танка.


Цитата Сообщение от Jupiter Посмотреть сообщение
pTop имеет тип указателя на указатель.
newElementOfStack->prev имеет тип указателя.
*pTop имеет тип указателя, звездочка перед pTop означает разыменованние указателя.
Непонятно осталось только одно: раз мы разыменовываем pTop (*pTop) - значится в pTop содержится ЗНАЧЕНИЕ, но для
но для поля prev (а он с одной звездочкой - это не совсем то, что надо). Ведь prev должен хранить АДРЕС на предыдущий элемент, а тут мы подсовываем ему ЗНАЧЕНИЕ.
Или я опять чего-то не догоняю?
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
09.03.2013, 14:01     Стек и указатели #6
Так pTop на то и указатель НА указатель, что указывает на указатель,
когда разименовываешь pTop получаешь значение указателя.
хочешь получить значение элемента, на который он указывает, - применяй разименование второй раз.
iKapex
3 / 3 / 0
Регистрация: 07.10.2012
Сообщений: 228
09.03.2013, 14:21  [ТС]     Стек и указатели #7
Если параметр - **pTop, тогда разыменование его - *pTop (его значение - адрес того объекта на который он указывает).

А разыменование второй раз - это как?
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 14:33     Стек и указатели #8
Цитата Сообщение от iKapex Посмотреть сообщение
А разыменование второй раз - это как?
так же как и первый
C++
1
**pTop
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 14:38     Стек и указатели
Еще ссылки по теме:

стек - C++
программа создает стек, удаляет вершину, удаляет выбранный элемент, сортирует стек, выводжит его на печать ПРОКОММЕНТИРУЙТЕ плиз...

Стек - C++
Реализовать при помощи одного массива два стека, суммарное количество элементов в которых ограничено длиной массива. Все стандартные...

Стек - C++
Показать содержимое стека , после ввода в него последовательности чисел 12,32,1,22,33,12 , 4,6,5 по алгоритмом- парное значение числа...

Стек - C++
Уважаемые теоретики по С++ подскажите, пожалуйста, как граммотно называются в Стеке самое нижнее и самое верхнее значения. Заранее спасибо.

Стек - C++
Создать программу, реализовав работу со структурой данных - стеком. В программе реализовать добавление и удаление элементов. вот у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
iKapex
3 / 3 / 0
Регистрация: 07.10.2012
Сообщений: 228
09.03.2013, 14:38  [ТС]     Стек и указатели #9
Воистину - это кошмар.

Так первый раз разыменование - это *pTop
Yandex
Объявления
09.03.2013, 14:38     Стек и указатели
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru