Truyền tham chiếu
Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 41 trên 56.
Khi bạn truyền đối số cho hàm (function), C++ thường tạo bản sao của các giá trị. Điều này có nghĩa là những thay đổi bên trong hàm không ảnh hưởng đến các biến ban đầu. Truyền tham chiếu thay đổi cách hoạt động này bằng cách cho phép hàm thao tác trực tiếp với các biến ban đầu.
Để truyền tham chiếu, hãy thêm ký hiệu & sau kiểu tham số trong phần khai báo hàm:
void doubleValue(int& number) {
number = number * 2; // Thay đổi biến (variable) ban đầu
}Khi gọi hàm (function) này, mọi thay đổi bạn thực hiện với tham số bên trong hàm sẽ trực tiếp sửa đổi biến ban đầu được truyền vào. Điều này đặc biệt hữu ích khi bạn muốn hàm sửa đổi các đối số hoặc khi làm việc với những đối tượng lớn mà việc sao chép sẽ kém hiệu quả.
Truyền tham chiếu giúp tránh tốn tài nguyên khi sao chép dữ liệu, nhờ đó chương trình chạy nhanh hơn và sử dụng bộ nhớ hiệu quả hơn, đặc biệt với các cấu trúc dữ liệu phức tạp như vector hoặc map.
Thử thách
DễTạo một hàm minh họa cách truyền tham chiếu bằng cách sửa đổi trực tiếp các biến thông qua tham số của hàm. Thử thách này sẽ kiểm tra mức độ hiểu của bạn về cách ký hiệu & cho phép hàm làm việc với các biến gốc thay vì bản sao.
Chương trình sẽ cung cấp các đầu vào sau:
- Một số nguyên
value1đại diện cho số thứ nhất - Một số nguyên
value2đại diện cho số thứ hai - Một số nguyên
value3đại diện cho số thứ ba
Chương trình của bạn cần:
- Tạo một hàm tên là
tripleValuesnhận ba tham số số nguyên theo cách truyền tham chiếu - Bên trong hàm, nhân mỗi tham số với 3
- Trong hàm main, đọc ba giá trị đầu vào và lưu vào các biến
- In các giá trị ban đầu trước khi gọi hàm
- Gọi hàm
tripleValuesvới ba biến - In các giá trị đã sửa đổi sau khi gọi hàm để cho thấy chúng đã thay đổi
Dùng định dạng đầu ra chính xác sau:
Trước khi gọi hàm:
Original values: [value1] [value2] [value3]Sau khi gọi hàm:
Tripled values: [new_value1] [new_value2] [new_value3]Khai báo hàm cần dùng ký hiệu & sau mỗi kiểu tham số để biểu thị cách truyền tham chiếu: void tripleValues(int& a, int& b, int& c). Cách này cho phép hàm sửa đổi trực tiếp các biến gốc được truyền vào, qua đó thể hiện điểm khác biệt chính giữa truyền theo giá trị và truyền theo tham chiếu. Các biến trong main sẽ thay đổi vĩnh viễn sau khi gọi hàm, chứng minh rằng hàm đã làm việc với các vị trí bộ nhớ gốc thay vì bản sao.
Tự làm thử
#include <iostream>
using namespace std;
// TODO: Tạo hàm tripleValues tại đây
int main() {
// Đọc các giá trị đầu vào
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// In ra các giá trị ban đầu
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: Gọi hàm tripleValues tại đây
// In ra các giá trị đã thay đổi
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online