Функциональность указателей и ссылок - PullRequest
2 голосов
/ 01 декабря 2010

Я в значительной степени новичок в C ++.Просто начал изучать это несколько недель назад.Я действительно заинтересован в том, чтобы улучшить свои навыки программиста, и в последние несколько дней меня смущает кое-что.Это указатели.Указатели и оператор ссылки.У меня вопрос, что именно является функциональностью указателей и ссылочного оператора?Как я узнаю, когда их использовать, каковы их цели и общие способы использования.Будем весьма благодарны за любые примеры, состоящие из общих алгоритмов, использующих разыменование и ссылку.

как я могу использовать ссылку и разыменование, чтобы стать лучшим программистом и улучшить свои алгоритмы (и, возможно, сделать их проще)?

Спасибо: D

Ответы [ 4 ]

3 голосов
/ 01 декабря 2010

Обязательно отметьте этот вопрос , принятый ответ хорошо объясняет указатели и распространенные ошибки с ними.

Обновление: Несколько моих собственных слов

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

  • Их размер (в байтах) фиксированный , что позволяет легко узнать, сколько байтов нам нужно прочитать, чтобы получить значение указателя.

При использовании других типов переменных (например, объектов) необходимо использовать какой-то механизм, чтобы компилятор знал, насколько велик каждый объект. Это вводит различные ограничения, которые различаются для разных языков и компиляторов. У указателей таких проблем нет.

  • Их размер также small (обычно 4 или 8 байт), что позволяет очень быстро обновлять их значения.

Это очень полезно, когда вы используете указатель в качестве токена, который указывает на потенциально большой объем информации. Рассмотрим пример: у нас есть книга с картинками картин. Вы должны описать мне картину, чтобы я мог найти ее в книге. Вы можете сесть и нарисовать точную копию, показать ее мне, и позвольте мне найти книгу; или вы можете сказать мне "это на странице 25". Это было бы похоже на использование указателя и намного быстрее.

  • Их можно использовать для реализации полиморфизма, который является одной из основ объектно-ориентированного программирования.

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

1 голос
/ 01 декабря 2010

Есть некоторые вещи, которые программист должен понять, прежде чем углубляться в указатели и ссылки на C ++.

Сначала вы должны понять, как работает программа. Когда вы выписываете переменные, когда вы пишете операторы, вы должны понимать, что происходит на более низком уровне; важно знать, что происходит с точки зрения компьютера.

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

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

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

C ++ упрощает работу со ссылками ( int & var ), но концепция та же. Он позволяет пропустить этап создания указателя для хранения адреса некоторых данных, и он делает все это автоматически для вас при передаче данных в функцию.

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

0 голосов
/ 01 декабря 2010

быть коротким: ссылка - это некоторое улучшение указателей, унаследованных от C до C ++ это немного безопаснее, потому что это помогает вам избегать использования "*" в ваших функциях, и это вызывает меньше ошибок сегментации. или как мои приятели говорят "избегай звездных войн"

есть много, чтобы узнать об этом !!!!

ищите использование «&» для отправки и получения значений по референции понять использование «&» для получения переменного адреса

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

0 голосов
/ 01 декабря 2010

Лучшее название оператора - оператор «Адрес». Потому что он возвращает адрес операнда.

В C ++ вы будете использовать указатели (и оба оператора ссылки / разыменования) при работе с динамически выделяемой памятью или при работе с арифметикой указателей.

Указатели также используются для разрушения статических привязок, поскольку они подразумевают динамическое связывание (через адрес, сохраненный в указателе, который может динамически изменяться).

Для всех других целей обычно лучше использовать ссылки вместо указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...