2013-04-12 2 views
1

Хорошо, после того, как я проигнорировал и пропустил указатели, я получил (они выглядели очень сложно, когда я впервые начал изучать C++> <). Наконец я решил узнать, что они собой представляют и как их использовать.Какова фактическая точка использования указателей в C++?

Итак, теперь я знаю, как использовать указатели, единственное, что я не могу решить, именно поэтому вы хотели бы использовать их. Я искал по всему Интернету почти 7 часов, и я все еще не могу найти подходящего объяснения.

Так что, пожалуйста, может кто-нибудь объяснить мне, в чем смысл использования указателей? (покажите мне пример, если вы можете, предпочтительно пример функции, которая делает что-то относительно полезное, чтобы я мог понять).

+1

C++ наследует указатели от C, и гораздо меньше использования для них на C++, чем в C. Это, конечно, не означает, что они бесполезны: у них * много * использования. Возьмите хорошую книгу или учебник. – NPE

+2

так много учебников по указателям c и C++ ... –

+2

Как еще вы могли бы создавать объекты динамически? –

ответ

3

Несколько примеров выбора, есть много, много больше:

  • Linked lists
  • PIMPL
  • Динамические объекты (new, delete, динамически размера массивов)
  • Все виды factories
  • Взаимодействие с C-библиотеками
2

Указатель - это всего лишь номер, хранящий числовой индекс для местоположения памяти. Каждая нетривиальная программа на каждом языке нуждается в таких количествах, чтобы отслеживать, где интересные функции и данные. На некоторых языках использование указателей скрыто - вы просто видите какой-то идентификатор типа «employee_name» и внутренне компилятор или интерпретатор упорядочивается для хранения и передает указатель на него, так как ему нужно, чтобы программа работала так, как это предусмотрено языком, но они всегда там внизу.

Если вы не видите использование указателя, вы не всегда можете узнать, какие операции на этом языке дешевы и которые несут расходы.

В некоторых языках, таких как VB, раньше использовались более продвинутые типы данных, такие как ассоциативные контейнеры (std::map, std::unordered_map), связанные списки, графики и т. Д. Недоступны; необходимо использовать неуклюжие функции, которые внутренне используют C или C++ для отслеживания отношений между элементами данных. Работая непосредственно на C++, вы можете сами создавать такие типы данных, чтобы моделировать произвольные отношения с точными поведенческими, эффективными и полезными для использования компромиссами памяти, которые вам подходят.

C++ предоставляет указатели так, чтобы у вас был явный контроль над тем, проходит ли область памяти, используемая существующим объектом, в разных частях программы, потенциально предоставляя им доступ для изменения значения или даже освобождения памяти. Это более эффективно, чем другие языки, такие как Java, Ruby и C#, где менее очевидно, какой код имеет доступ к некоторым данным по сравнению с копией этих данных, когда копирование может произойти, когда данные больше не нужны. Такие вещи, как сбор мусора, пытаются отслеживать использование данных, но обычно приводят к проблемам производительности, неэффективности и непредсказуемым срокам уничтожения - независимо от того, зависит ли это от приложения.

0

Основная причина - эффективное использование стека и кучи.

Стек имеет очень ограниченный размер и представляет собой контейнер, который содержит переменные.

Куча (или «свободный магазин») представляет собой большой пул памяти, используемый для динамического распределения. Его размер ограничен доступным пространством в вашей динамической памяти (ОЗУ).

Если вы попытаетесь сохранить все в стеке без динамического выделения и указателей, вы попадете в переполнение стека.

Вы также можете представить себе кучу как страна путешествовать и стек Ваш гид, который вы можете получить информацию о местоположении ресторанов, гостиниц и т.д ..

+0

Я медленно начинаю получать его сейчас, спасибо: 3 –

Смежные вопросы