Menu
CoddyTech

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.

challenge icon

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:

  1. Tạo một hàm tên là tripleValues nhận ba tham số số nguyên theo cách truyền tham chiếu
  2. Bên trong hàm, nhân mỗi tham số với 3
  3. Trong hàm main, đọc ba giá trị đầu vào và lưu vào các biến
  4. In các giá trị ban đầu trước khi gọi hàm
  5. Gọi hàm tripleValues với ba biến
  6. 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;
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C++ online