Правильно ли понимаю работу ссылок в С++?

Проходим в универе программирование и есть один вопрос у профи, спросить у преподавателя нет возможности.
Просмотрите код и подскажите: в функции Foo мы возвращаем значение а, как локальную переменную и в основной функции значение не поменяется на 15, а останется 5. Если в параметры Foo дописать амперсанд после типа данных, адрес памяти поменяется на адрес а из основной функции. Я правильно понял, что дописав амперсанд, функция ссылается на переменную из основной функции? Заранее извиняюсь, если непонятный код или предложение =(

#include <iostream>

void Foo(double a) {
	std::cout << &a << std::endl;
	std::cout << a << std::endl;

	a = 15.0;
	std::cout << a << std::endl;
}

int main()
{
	setlocale(LC_ALL, "rus");
	double a = 5.0;
	std::cout << &a << std::endl;
	std::cout << a << std::endl;
	std::cout << std::endl;
	
	Foo(a);

	std::cout << std::endl;
	std::cout << a << std::endl;
	system("pause");
	return 0;
}
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Это называется передача по ссылке/передача по значению. С амперсантом, передается ссылка на переменную. Иначе - копия значения переменной. Если вы будете менять копию значения, ничего вне функции не изменится, ведь вы копию меняете. А если будете менять значение ссылки, вы будете менять значение той же самой переменной.
Ответ написан
Комментировать
Я правильно понял, что дописав амперсанд, функция ссылается на переменную из основной функции?
Да.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы