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

[C++] Что значит возвратить ссылку?

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



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

СообщениеДобавлено: Сб Фев 24 2007 18:46    Заголовок сообщения: [C++] Что значит возвратить ссылку? Ответить с цитатой

Имеется простой исходный текст программы на C++:

Код:

#include <iostream>

int& SomeFunc(int);

int main()
{
        int a = SomeFunc(76);

        std::cout << a;

        return 0;
}

int& SomeFunc(int v_a)
{
        int * temp = new int(++v_a);
        return *temp;
}


Мне не понятен момент с функцией SomeFunc(). Что конкретно она возвращает в функцию main()? То есть она фозвращает ссылку на некоторое целое число (int&), а что это значит-то?
_________________
Стиль должен быть во всем, даже в мелочах...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пн Фев 26 2007 02:36    Заголовок сообщения: Ответить с цитатой

Думаю, что не открою Америку, если скажу, что значения переменных или значения, возвращаемые функциями, хранятся в оперативной памяти. Так вот. Чтобы знать, где именно в оперативке лежит такое значение, надо знать его адрес. В программировании вместо указания адреса используются именно переменные. Но есть переменные, которые не указывают на значение, лежащее в ОЗУ, а хранят именно адрес значения. Такие переменные зовутся... (барабанная дробь) "указатели"! Их значение (т.е. адрес) и есть ссылка.

Чтобы объявить переменную как указатель, перед ее именем ставится символ "звездочка" (*), а чтобы потом "прочитать", что хранится по адресу, на который ссылается указатель, надо перед ним поставить символ амперсанда (&). Поэтому, присваивая переменной возвращаемое функцией SomeFunc значение, ты ей присваиваешь именно адрес (32-битное число), а не значение.

Твоя функция, в данном случае, возвращает ссылку на массив (т.е. адрес первого элемента массива). Поэтому надо писать

Код:
int *a = SomeFunc(сколько-то_там);


И тогда все будет ок. Твоя переменная a - опять же, в данном случае - становится целочисленным массивом.

Удачи! Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jail



Зарегистрирован: 16.01.2007
Сообщения: 180
Откуда: Russia

СообщениеДобавлено: Вс Мар 04 2007 11:21    Заголовок сообщения: Ответить с цитатой

А нельзя было сказать проще. Что функция SomeFunc() возвращает указатель на целочисленный массив temp, используемый в этой функции, дабы не потерять это значение при выходе из неё))))))))) Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...