Указатели в С++

программирование C++ указатели

В каких случаях целесообразно использовать указатели, а в каких нет? Небольшие отрывки кода в качестве обоснования приветствуются =)

Примечание:
azlab.org, да, я действительно не понимаю =)

Примечание:
as_maestro, thx
Ответы:
В С++ массивы - это практически красивая запись указателей. А используются, например в динамических массивах, или при передаче функции строки или ещё чего похуже, или при передаче параметров камандной строки и т.д.
Указатели необходимо использвать когда
а) у вас есть объект, который нельзя или затруднительно копировать.
б) есть объект, который инициализируется в неопределённый заранее момент
в) необходимо создать заранее неизвестное количество объектов
г) требуется использовать полиморфизм
д) функция может менять аргумент
В случаях а), г), д) лучше использовать ссылки, а не указатели
во многих, всех их перечислить достаточно сложно
Вместо указателей лучше использовать ссылки и boost::intrusive_ptr
1. Самый простой пример:
char string[]="some string";
printf(string);
Сдается, вы просто не понимаете что такое указатель. Потому что так же можно спросить: "в каких случаях целесообразно использовать ярлык для файла, а в каких - копию файла?". Очевидно, что спросивший такое - просто не понимает что такое ярлык. Так вот, указатель - это и есть ярлык на некий адрес в памяти. Там может лежать значение переменной, начало массива, объект - что угодно. Как вам ответить - в каких случаях использовать указание адреса на данные или копию этих данных? Это зависит полностью от задачи. То есть, когда вы хорошенько разберетесь что такое указатель, вопрос когда его лучше использовать (и когда нужно) - отпадет сам собой. В С++ также допустимы нетипизированные указатели: вы можете рассматривать данные берущие начало в указатели как захотите (это дает определенную гибкость, но и, разумеется, повышает вероятность ошибок)
Важно не путать указатели и ссылки. А вообще почти всегда лучше использовать умные указатели, например, из boost.
я думаю, тут вопрос скорее стоит переформулировать как "когда лучше использовать статическое выделение памяти, а когда - динамическое?", потому что вопрос про указатели смысла, вообще говоря, не имеет.
так вот, статический буфер целесообразно выделять под данные внутри конкретной функции, когда заранее известна их природа и предполагаемый размер выделяемой области, а так же требуется обеспечить максимальное быстродействие.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.