Передача по ссылке
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 41 из 56.
Когда вы передаете аргументы в функции, C++ обычно создает копии значений. Это означает, что изменения внутри функции не влияют на исходные переменные. Передача по ссылке изменяет это поведение, позволяя функциям работать напрямую с исходными переменными.
Чтобы передать по ссылке, добавьте символ & после типа параметра в объявлении функции:
void doubleValue(int& number) {
number = number * 2; // Изменяет исходную переменную
}Когда вы вызываете эту функцию, любые изменения, внесенные в параметр внутри функции, будут напрямую изменять исходную переменную, которая была передана. Это особенно полезно, когда вы хотите, чтобы функция изменяла свои аргументы, или при работе с большими объектами, где копирование было бы неэффективным.
Передача по ссылке устраняет накладные расходы на копирование данных, делая ваши программы быстрее и эффективнее с точки зрения использования памяти, особенно при работе со сложными структурами данных, такими как векторы или карты (maps).
Задание
ЛегкоСоздайте функцию, которая демонстрирует передачу по ссылке, изменяя переменные напрямую через параметры функции. Эта задача проверит ваше понимание того, как символ & позволяет функциям работать с оригинальными переменными вместо их копий.
Будут предоставлены следующие входные данные:
- Целое число
value1, представляющее первое число - Целое число
value2, представляющее второе число - Целое число
value3, представляющее третье число
Ваша программа должна:
- Создать функцию с именем
tripleValues, которая принимает три целых параметра по ссылке - Внутри функции умножить каждый параметр на 3
- В основной функции (main) считать три входных значения и сохранить их в переменных
- Вывести исходные значения перед вызовом функции
- Вызвать функцию
tripleValuesс тремя переменными - Вывести измененные значения после вызова функции, чтобы показать, что они изменились
Используйте следующий точный формат вывода:
Перед вызовом функции:
Original values: [value1] [value2] [value3]После вызова функции:
Tripled values: [new_value1] [new_value2] [new_value3]Сигнатура функции должна использовать символ & после каждого типа параметра для указания передачи по ссылке: void tripleValues(int& a, int& b, int& c). Это позволяет функции напрямую изменять исходные переменные, переданные ей, демонстрируя ключевое различие между передачей по значению и передачей по ссылке. Переменные в main будут окончательно изменены после вызова функции, что доказывает работу функции с оригинальными ячейками памяти, а не с копиями.
Шпаргалка
Чтобы передать по ссылке в C++, добавьте символ & после типа параметра в объявлении функции:
void doubleValue(int& number) {
number = number * 2; // Изменяет исходную переменную
}Передача по ссылке позволяет функциям работать напрямую с исходными переменными вместо их копий. Изменения, внесенные в параметры внутри функции, изменят исходные переменные, которые были переданы.
Это устраняет накладные расходы на копирование данных, делая программы быстрее и эффективнее с точки зрения использования памяти, особенно при работе со сложными структурами данных, такими как векторы или ассоциативные массивы (maps).
Попробуйте сами
#include <iostream>
using namespace std;
// TODO: Создайте здесь функцию tripleValues
int main() {
// Считать входные значения
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// Вывести исходные значения
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: Вызовите здесь функцию tripleValues
// Вывести измененные значения
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров