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

Зачем вообще указатели в C++?

Я не могу понять зачем они, зачем создавать объект например так: MyClass* Object = new MyClass(); Я изучают C++ по книге, перечитывал 2 раза про указатели и не могу въехать зачем они. Если это возможно, то объясните простым языком.
Pavel Artemiev
Pavel Artemiev
89
может, на пальцах будет удобнее понять.

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

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

так и в сях. есть выделенная под объект область памяти, и есть указатель на эту область памяти - маленькая переменная, целое число, которую можно передавать в функции, клонировать и т. д.
Дмитрий Третьяков
Дмитрий Третьяков
68 275
Лучший ответ
Андрей Родионов Вам бы в преподаватели))) Очень доходчиво)))
Pavel Artemiev Спасибо
Просто это такой способ работы с объектами (и не только с ними), перешедший в C++ из чистого С, как и многое другое. Можно в языке обойтись и без них, например, в С# указатели нормально не используются (хотя если очень постараться, то можно).
Фактически это открытая для программиста косвенная адресация, широко используемая на уровне машинных кодов, а C++, как и С, стремился сохранить средства, близкие к машинному коду, для возможности высокой оптимизации кода программистами.
Виталий Пирог
Виталий Пирог
73 419
Pavel Artemiev Можно подробнее? Буду благодарен.
Покажи, как ты возвращаешь созданный объект?
Предположим, с данными размером в 1Гб
Вадим Матушкин
Вадим Матушкин
42 621
Alexandr Lakomyy прикольно
указатели хорошо раскрыты в учебнике по си автор Ричи и Керриган "Язык программирования Си"
MyClass* Object = new MyClass();
Ну это не совсем корректная запись... скобки не нужны. да и без них она бессмыслена. Я думаю Вы имеете ввиду полиморфную возможность, что бы переопределять методы несуществующих подклассов. Если Вы читали книгу, то раздел о полиморфизме нельзя не заметить)))
Кроме того указатели и ссылки используются при передаче аргументов в функции... При передаче массива данных, Вы передаете не весь массив а только адрес на его первый элемент, что эффективно.
Но вернуться к полиморфизму простой пример:
Валера Ким
Валера Ким
10 755
Попросту сказать указатель это ссылка
Юрий Галкин
Юрий Галкин
10 506
зачем они зачем они а зачем они ?

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

в общем можно загуглить зачем или че такое указатель. я просто не интересовался очень сильно этим я примерно понял и то вряд ли как это работает и пошел дальше.
ну наверно ты станешь крутым программистом раз интересуешься такими мелочами.
или это не мелочи и я просто дурак в общем я забил на это.
Олег Дёмушкин
Олег Дёмушкин
3 061
Какие языки до с++ изучал?
Георгий Габов
Георгий Габов
2 368
Pavel Artemiev Мне 13(Хотя думаю это не имеет никакого значения) я пробовал много языков, каждый раз изучал только их основы (Просто топтался на месте) были : python, java, пробовал вэб... потом решил учить C++, знаю C++ не лучшее для начинающих но всё-таки хочу разобраться.
Указатели это переменные, содержащие в себе адрес в памяти. По этому адресу в памяти может лежать любой объект, и чтобы иметь к нему доступ, нужно знать его адрес. Аналогия из жизни это любой жилой дом и его адрес. Ты не найдешь дом в городе, если не будешь знать его адреса. Так вот, переменные указатели как раз в себе и содержат адреса на объекты в памяти
Azamat Sertaev
Azamat Sertaev
819