Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Зачем нужны указатели?

#c++ #указатели


Oбъяcнитe, зaчeм нyжны yкaзaтeли? 

Heт, я пoнял пpинцип paбoты, нo нe пoнял oднoгo - ЗAЧEM? Зaчeм paбoтaть c фyнкциями-члeнaми,
пepeмeнными пo ccылкe, ecли я мoгy paбoтaть c ними нaпpямyю? 
    


Ответы

Ответ 1



"Если кто-то зажигает звезды, значит, это кому-нибудь нужно" Вот такой пример. Положим, Вы передаете в функцию какую-то переменную. Там с ее значением что-то делается, и новое значение должно быть занесено в ту переменную, значение которой Вы в функцию передали. Если сделаете что-то типа этого void func (int a) { a += 10; } ...... int i = 2; func(i); То значение переменной i не изменится, потому что в функцию передается копия этой переменной и с ней производятся операции. А если передать указатель или ссылку на эту переменную, то получите доступ к ней и можете изменять ее значение void func (int* a) { *a += 10; } ...... int i = 2; func(&i); Если нужно передать в функцию структуру или объект, то передавать его целиком можно, но это может отнять кучу памяти и времени, ведь они могут быть очень большими. В простых примерах это незаметно, но в реальных программах, где это может повторяться тысячи и миллионы раз, тормоза будут огромные. Вместо этого передаете указатель или ссылку и получаете из функции доступ к объекту. Уже говорили о динамическом выделении памяти. Если еще про это не читали, то прочитаете. Там без указателей В ПРИНЦИПЕ не обойтись. Это лишь несколько примеров. Чем глубже будете вникать в С++, тем больше об этом узнаете. И еще. Не думайте, что программисты до Вас были дураками.

Ответ 2



Указатели применяют: Для возврата нескольких значений из функции. В качестве аргумента передаётся указатель на переменную, функция записывает туда значение. Такой подход очень распространён в DirectX, OpenGL, Windows API и других библиотеках в стиле C. Для этого можно использовать и ссылки, но не рекомендуется, так как синтаксис передачи и возврата неотличим. Для хранения адреса динамически выделенной памяти. Она отличается от обычной тем, что программист сам регулирует время жизни объектов, и её больше (а размер стека всего порядка мегабайта). Если адрес будет потерян, то память нельзя будет ни использовать, ни освободить. Возникнет утечка памяти. C-строка представляет собой указатель на её первый символ. Для создания различных структур данных: связанных списков, деревья и т. д. Для передачи аргумента в функцию без копирования (и вызова конструктора для объектов), которое может оказаться долгим для сложных объектов. Правда, здесь лучше использовать константные ссылки. Таким образом, примений указателей очень много.

Ответ 3



Чтобы выделять большое количество памяти. Советую прочитать про стек и кучу (heap). На стеке при большом объеме данных будет происходить переполнение.

Комментариев нет:

Отправить комментарий