Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

(C++) Передача аргументов в функцию по ссылке и по указателю

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Jester



Зарегистрирован: 01.08.2006
Сообщения: 12
Откуда: Россия, Москва

СообщениеДобавлено: Вт Авг 01 2006 00:47    Заголовок сообщения: (C++) Передача аргументов в функцию по ссылке и по указателю Ответить с цитатой

Помогите пожалуйста понять, чем в C++ отличается передача аргументов в функцию по ссылке и по указателю.

Вот пример:

1. По ссылке:
void test(int& a) // прототип
test(a); // вызов
2. По указателю:
void test(int* a) // прототип
test(&a); // вызов

В обоих случаях (не знаю правли я) в функцию передается адрес переменной a. Тогда в чем же разница между этими двумя способами?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Вт Авг 01 2006 07:44    Заголовок сообщения: Ответить с цитатой

Разница в способе использования внутри функции. В том надо ли писать значек & или нет. Вообще передача по ссылке дело плохое, т.к. функция в которой есть такие аргументы может изменить переменную, а программист об этом даже догадываться не будет. Если использовать аргументы по указателю, программисту сразу видно, что функция изменяет этот аргумент.
_________________
Самоловских Виталий aka Kefir
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Jester



Зарегистрирован: 01.08.2006
Сообщения: 12
Откуда: Россия, Москва

СообщениеДобавлено: Вт Авг 01 2006 08:13    Заголовок сообщения: Ответить с цитатой

Kefir, спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
sniper::p



Зарегистрирован: 04.10.2005
Сообщения: 237
Откуда: rus/73

СообщениеДобавлено: Вт Авг 01 2006 22:43    Заголовок сообщения: Ответить с цитатой

Kefir писал(а):
Если использовать аргументы по указателю, программисту сразу видно, что функция изменяет этот аргумент.
Это, надо сказать, тоже вопрос скользкий. Например, по указателю можно передать объект лишь для того, чтоб он весь в стек не копировался, но забыть указать int * const a, в смысле модификатор const. В тоже время можно указать int & const a, что будет говорить об этом, втором применении ссылки. Это дело стиля. Предлагаю почитать по этому поводу книгу ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ, ЧТОБЫ ВЫСТРЕЛИТЬ СЕБЕ В НОГУ. Правила программирования на С и С++. Ален И. Голуб Кроме того, на форуме RSDN.ru есть на эту тему ветка форума, в которой тоже достаточно подробно описана вся эта фигня с указателями и ссылками
_________________
Нет предела совершенствованию
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Jester



Зарегистрирован: 01.08.2006
Сообщения: 12
Откуда: Россия, Москва

СообщениеДобавлено: Вт Авг 01 2006 23:34    Заголовок сообщения: Ответить с цитатой

sniper::p, спасибо за информацию! Обязательно почитаю.
_________________
Стиль должен быть во всем, даже в мелочах...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...