Chuyển đến nội dung chính
Mô-đun 3 · Bài học 2 trong tổng số 28/18 trong khóa học~12 min
Bài học theo mô-đun (2/2)

Truyền theo giá trị và tham chiếu

Trong C++, khi bạn truyền một đối số cho một hàm, có hai cách chính để thực hiện điều đó: theo giá trị hoặc theo tham chiếu.

Hiểu được sự khác biệt này là chìa khóa cho cả tính đúng đắn của chương trình và tối ưu hóa hiệu suất.

Truyền theo giá trị (Sao chép)

Theo mặc định, C++ chuyển đối số theo giá trị. Điều này có nghĩa là bản sao của dữ liệu được tạo trong bộ nhớ. Mọi sửa đổi được thực hiện bên trong hàm sẽ không ảnh hưởng đến biến ban đầu bên ngoài:

C++
#include <iostream>

void increment(int n) {
    n++; // Modifies only the local copy
}

int main() {
    int x = 5;
    increment(x);
    std::cout << x << std::endl; // Prints 5, x remains unchanged!
    return 0;
}

Vượt qua tham chiếu (&)

Nếu bạn muốn hàm có thể sửa đổi biến ban đầu hoặc nếu bạn muốn tránh sao chép các đối tượng lớn (như chuỗi dài hoặc vectơ), bạn phải sử dụng chuyển bằng tham chiếu.

Tham chiếu được khai báo bằng cách thêm ký hiệu & sau loại tham số:

C++
#include <iostream>

void incrementRef(int& n) {
    n++; // Modifies the original variable directly
}

int main() {
    int x = 5;
    incrementRef(x);
    std::cout << x << std::endl; // Prints 6!
    return 0;
}

Tham số int& n không phải là bản sao mà là bí danh (tham chiếu trực tiếp) cho biến x được truyền khi gọi hàm.

Hãy tự mình thử

tập thể dục#cpp.m3.l2.e1
Nỗ lực: 0Đang tải…

Xác định hàm có tên doubleNumber với kiểu trả về void tham chiếu đến số nguyên n (sử dụng int& n) và nhân đôi giá trị của nó (n = n * 2). Gọi nó trong main truyền biến val được khởi tạo thành 10, sau đó in val.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Chữ ký hàm sử dụng `&`ký tự sau loại để biểu thị một tham chiếu:`void doubleNumber(int& n)`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#cpp.m3.l2.e2
Nỗ lực: 0Đang tải…

Xác định hàm có tên swap nhận vào hai tham chiếu số nguyên a và b (int& a, int& b) và hoán đổi giá trị của chúng bằng cách sử dụng biến tạm thời temp. Gọi nó trong main để hoán đổi x và y, sau đó in chúng.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng `int temp = a; a = b; b = temp;` để hoán đổi các giá trị.

Giải pháp khả dụng sau 3 lần thử