Selen95 Ответов: 2

Почему мы используем & для функции gettop ?


Всем привет

Я изучал C++, ADT Stack, и есть две функции, которые я путаю.
Я написал коды выше , мой вопрос таков:
мы используем & при использовании функции bool pop b/c мы меняем стек, но
почему мы используем & для функции getTop ? мы просто извлекаем верхнюю часть стека, но не меняем ее, верно ?

Что я уже пробовал:

bool pop(StackItemType& stackTop);

// Извлекает и удаляет верхнюю часть стека

// Предварительное Условие: Нет.

// Postcondition: если стек не пуст,
// stackTop содержит элемент, который был добавлен
// совсем недавно и этот элемент был удален.
// Однако, если стек пуст, удаление
// невозможно, а stackTop остается неизменным.

----------------------------------------------------

bool getTop (StackItemType& stackTop) const;

// Извлекает верхнюю часть стека.

// Предварительное Условие: Нет.

// Postcondition: если стек не пуст,
// stackTop содержит элемент, который был добавлен
// последний раз. Однако, если стек
// пусто, операция завершается неудачей и stackTop
// неизменный. Стек остается неизменным.

2 Ответов

Рейтинг:
1

Dave Kreskowiak

Лучшим источником информации будет документация по библиотеке, которую вы используете.

Но вы передаете указатель на стек элементов, в основном адрес в памяти, где находится ваш стек. Вот для чего нужен символ &, чтобы использовать адрес объекта вместо его содержимого.


Midi_Mick

На самом деле, Дейв, "& "в данном случае является" ссылкой на "оператор, а не" адресом " оператора. Если бы адрес передавался, объявление использовало бы оператор " * " для своего параметра. Тонкое, но важное различие.

Dave Kreskowiak

Да, прошло много времени с тех пор, как я был в мире C/C++.

Рейтинг:
1

nv3

Функция getTop извлекает верхний элемент стека и передает его значение через аргумент stackTop. Следовательно, stackTop должен передаваться либо по ссылке (это делается здесь, и именно для этого используется &), либо по указателю (который не был выбран разработчиком этой функции). Будет ли stackTop передаваться по значению он может передавать только значение в функция, но не возвращаемое значение.

Таким образом, & существует не для того, чтобы изменить стек (чего он не мог сделать), а для того, чтобы вернуть значение через параметр stackTop.