Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Возвращение ссылок\указателей  (Прочитано 7806 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KurT
Гость
« : 30-09-2004 22:02 » 

Не надо в меня кидаться тяжёлыми предметами тема то для новичков. Подскажите когда можно возвращать из функции указатель, а когда нет.
Записан
stragner
Гость
« Ответ #1 : 01-10-2004 00:33 » 

KurT, указатель из функции можно возвращать хоть когда Улыбаюсь) Главное, чтоб он указывал не на локальную переменную функции, которая уничтожается после выхода из функции, поэтому если возвращаешь указатель, что в функции используй динамическое размещение данных.
Записан
KurT
Гость
« Ответ #2 : 03-10-2004 19:49 » 

А навиг, например, такой код нужен?
Код:
int& Fn(int& par){
  return par*par;
}
« Последнее редактирование: 21-12-2004 20:29 от Гром » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 03-10-2004 21:29 » 

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

Лично я ими пользуюсь редко... В ряде случаев они удобны. Оправданы они, имхо, когда у тебя некий объект размещён в стеке, а тебе его нужно передать в функцию для изменения.
например,
Код:
void Fn(int *x);
...
int x = 3;
Fn(&x);
внутри Fn может возникнуть соблазн применить delete, что приведёт к ошибке - ссылка убережёт от таких соблазнов. (пример простейший, естественно).
другой пример
Код:
int Fn(int x);
....
int x = 3;
x = Fn(x);
всё бы ничего, однако при передаче x в функцию происходит его копирование, а при возврате - создание нового int. Для int это, конечно, некритично, а если у тебя будет объект размером в 10 Мб? А если таких объектов будет много? Непроизводительные затраты памяти и процессорного времени. Ссылки же избавляют от необходимости копировать объект - он всегда один, а ссылок на него много.

может ещё кто какие случаи оправданного применения приведёт...
« Последнее редактирование: 21-12-2004 20:29 от Гром » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
KurT
Гость
« Ответ #4 : 06-10-2004 08:45 » 

Это понятно. Тот код, который привёл я, есть во всех книгах по С++, типа пример о передачи указателей и ссылок из фунункции. Так вот, нафиг он такой нужен.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-10-2004 15:21 » 

KurT, если ты имеешь в виду код int& Fn(int& par){return par*par;}, то ни в какой книге по C++ я такого не видел. Хуже того, в нормальном самоучителе только подчеркивают ошибочность подобного кода.
Объекты в памяти делятся на три класса хранения: статический, автоматический и динамический. Возврящать из ф-ии можно только указательна на статический и динамический классы хранения. Автоматические переменные могут хранится на стеке и в регистрах процессора и автоматически уничтожаются при выходе из ф-ии..
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines