Задать вопрос

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

Проходим в универе программирование и есть один вопрос у профи, спросить у преподавателя нет возможности.
Просмотрите код и подскажите: в функции 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 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Это называется передача по ссылке/передача по значению. С амперсантом, передается ссылка на переменную. Иначе - копия значения переменной. Если вы будете менять копию значения, ничего вне функции не изменится, ведь вы копию меняете. А если будете менять значение ссылки, вы будете менять значение той же самой переменной.
Ответ написан
Комментировать
Я правильно понял, что дописав амперсанд, функция ссылается на переменную из основной функции?
Да.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы