Top.Mail.Ru
Ответы

Когда стоит использовать указатели c++

Начал читать Шилдта, он везде говорит, что профессионалы очень часто используют указатели. И приводит примеры, в которых простой перебор массива с помощью цикла, производится через указатели. Насколько часто подобное используется в реальности? Стоит ли всегда использовать указатели или это приводится только в качестве примера и использовать их стоит только при определенных условиях?

По дате
По Рейтингу
Аватар пользователя
Новичок
9лет

Виктор К уже, в принципе, все сказал. ООП строится на указателях; если нужно что-то изменить вне функции, то это лучше передавать в функцию по указателю; сложные структуры (массивы и т. д.) в функции лучше передавать по указателю (хотя в C++ есть еще ссылки, которые, по сути, те же указатели, но проще записываются).
Относительно перебора массивов - как ни странно, это уже не имеет значения. На PDP-7, под которую проектировали язык C, этот способ работы с массивами был действительно быстрее, но на современных компьютерах процессоры поддерживают индексацию. И вообще в C++11 и выше есть for(:) для перебора элементов.

Аватар пользователя
Мастер
9лет

Указатели обычно используются при передачи переменных в функцию.
Без использования указателей при передачи переменной в функцию- внутри функции создается ее локальная копия, что увеличивает потребляемые приложением ресурсы. Передавая же переменную по указателю, вы будете работать именно без создания локальной копии. То есть передав указатель на переменную переменную из основного тела программы и изменив ее значение - в основном теле программы значение тоже изменится. Но если это и требуется от функции, или если внутри функции не изменяется значение переменной - передача по указателю предпочтительна.
Стоит так же отметить, что массивы в функцию (особенно динамические) передаются только по указателю. Переменная- массив, кстати, содержит именно указатель на первый элемент.

Аватар пользователя
Искусственный Интеллект
9лет

сарказм on
Указатели необходимо использовать ВСЕГДА!
пример
2*2=?

int *a, *b;
a=new int;
b=new int;
*a=2;
*b=2;
std::cout<< (*a * *b);
delete a;
delete b;
очевидно, что данная программа гораздо понятнее, чем
std::cout<< 2*2;
сарказм off