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&), а что это значит-то? _________________ Стиль должен быть во всем, даже в мелочах... |
|
Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Пн Фев 26 2007 02:36 Заголовок сообщения: |
|
|
Думаю, что не открою Америку, если скажу, что значения переменных или значения, возвращаемые функциями, хранятся в оперативной памяти. Так вот. Чтобы знать, где именно в оперативке лежит такое значение, надо знать его адрес. В программировании вместо указания адреса используются именно переменные. Но есть переменные, которые не указывают на значение, лежащее в ОЗУ, а хранят именно адрес значения. Такие переменные зовутся... (барабанная дробь) "указатели"! Их значение (т.е. адрес) и есть ссылка.
Чтобы объявить переменную как указатель, перед ее именем ставится символ "звездочка" (*), а чтобы потом "прочитать", что хранится по адресу, на который ссылается указатель, надо перед ним поставить символ амперсанда (&). Поэтому, присваивая переменной возвращаемое функцией SomeFunc значение, ты ей присваиваешь именно адрес (32-битное число), а не значение.
Твоя функция, в данном случае, возвращает ссылку на массив (т.е. адрес первого элемента массива). Поэтому надо писать
Код: | int *a = SomeFunc(сколько-то_там); |
И тогда все будет ок. Твоя переменная a - опять же, в данном случае - становится целочисленным массивом.
Удачи! |
|