Другие языки программирования и технологии

Зачем нужны указатели в c++? Нельзя ли обычными переменными пользоваться?

Без указателей никак. Думаешь, та-же структура передаётся целиком? - хер там - только указатель на неё передаётся всегда. Тот-же массив - указатель на область памяти. Каждый элемент массива - смещение относительно его начала. Как без указателей?
Еслиб не было указателей, то каждый раз передавались бы метры данных. Представляешь какие это тормоза?
Андрей Юнацкий
Андрей Юнацкий
83 878
Лучший ответ
Александр Голотовский Про структуры полная чушь, если не сказано дополнительно, все структуры передаются по значению, т. е. копируются.

Без указателей можно и НУЖНО обойтись, используя ссылки.
Мансур Назар > Думаешь, та-же структура передаётся целиком? - хер там - только указатель на неё передаётся всегда.
Передаёшь по значению — копируется вся структура.
>Зачем нужны указатели в c++?
Для доступа к куче.

>Нельзя ли обычными переменными пользоваться?
Можно, пока задача позволяет.
Денис Шепелев
Денис Шепелев
80 242
Если ты создал объект некоего человека, то вероятно ты хочешь работать с одной и той же его версией в разных участках кода, а для этого нужно поместить его в кучу (в памяти) и передавать ссылку на объект. Если же ты работаешь без ссылки, то значит работаешь с разными объектами, изменения которых друг на друга никак не влияют.
***** ******
***** ******
93 999
Что бы было быстрее и экономней, можно создать указатель на массив и передать его в функцию и обращаться через него, что бы что-то сделать с массивом. И не нужно копировать массив и возвращать его значение через функцию. Так быстрее и меньше памяти используется.
указатели дают огромные возможности.

Например, есть игра, гонки.

Там могут быть разное количество соперников.

например от 1 до 120

да, можно создать массив из 120 объектов, но зачем это держать в памяти?

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

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

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

Адрес типа 0x00000000 = 32 бита. либо 64 если 64 бит программа. могу ошибаться пусть поправят
Иван Атутов
Иван Атутов
30 074
Не нужны. Пользуйся обычными
Никита Адеев
Никита Адеев
24 328
В С++ не нужны, есть умные указатели в std, которые сами себя уничтожат, покинув область видимости.