Xem thêm

Hiểu rõ hơn về tham trị và tham chiếu trong C++

Huy Erick
Trong bài viết này, hãy cùng tìm hiểu về hai khái niệm "tham trị" và "tham chiếu" trong ngôn ngữ lập trình C++. Đây là hai phương pháp truyền tham số cho một hàm mà...

Trong bài viết này, hãy cùng tìm hiểu về hai khái niệm "tham trị" và "tham chiếu" trong ngôn ngữ lập trình C++. Đây là hai phương pháp truyền tham số cho một hàm mà bạn nên biết để sử dụng một cách hiệu quả.

Sự khác biệt giữa tham trị và tham chiếu

Trong C++, chúng ta có hai cách gọi hàm là tham trị (call by value) và tham chiếu (call by reference). Cả hai đều dùng để truyền dữ liệu cho hàm, nhưng có những khác biệt quan trọng.

Khi sử dụng "tham trị", giá trị của tham số thực tế được copy vào tham số hình thức của hàm. Điều này có nghĩa là bất kỳ thay đổi nào được thực hiện trên tham số hình thức trong hàm cũng không ảnh hưởng đến giá trị gốc của biến khi kết thúc hàm. Trong khi đó, khi sử dụng "tham chiếu", địa chỉ của tham số thực tế được truyền vào hàm, nên bất kỳ thay đổi nào trên tham số hình thức cũng làm thay đổi giá trị gốc của biến.

Ví dụ:

int i = 1;  void modifyValue(int value) {     value = 15; }  modifyValue(i); 

Kết quả sau khi thực thi đoạn code trên, giá trị của biến i vẫn giữ nguyên là 1. Điều này xảy ra vì chúng ta đã sử dụng "tham trị" khi gọi hàm.

Trong trường hợp của "tham chiếu", giá trị của biến thực tế sẽ bị thay đổi bởi vì chúng ta truyền vào địa chỉ của biến, không phải giá trị của nó. Điều này có nghĩa là tham số hình thức và tham số thực tế sẽ cùng trỏ đến cùng một địa chỉ trong bộ nhớ. Ví dụ:

void swap(int &x, int &y) {     int temp = x;     x = y;     y = temp; }  int a = 5; int b = 10;  swap(a, b);

Kết quả sau khi thực thi đoạn code trên, giá trị của biến ab đã được hoán đổi. Điều này xảy ra vì chúng ta đã sử dụng "tham chiếu" khi gọi hàm.

Sự khác nhau giữa tham trị và tham chiếu

Để tổng hợp sự khác biệt giữa "tham trị" và "tham chiếu" trong C++, chúng ta có bảng sau:

Tham trị Tham chiếu
Một bản sao của giá trị của biến được truyền vào hàm Địa chỉ của biến được truyền vào hàm
Thay đổi biến bên trong hàm không làm thay đổi biến truyền vào hàm Thay đổi biến bên trong hàm làm thay đổi biến truyền vào hàm
Tham số hình thức và tham số thực tế có địa chỉ khác nhau trong bộ nhớ Tham số hình thức và tham số thực tế cùng chia sẻ cùng một địa chỉ trong bộ nhớ

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về hai phương pháp thường được sử dụng khi gọi hàm trong ngôn ngữ lập trình C++, đó là "tham trị" và "tham chiếu". Tùy thuộc vào từng trường hợp, bạn có thể lựa chọn phương pháp phù hợp để truyền tham số cho hàm.

Nếu bạn chỉ cần lấy giá trị của biến để tính toán mà không muốn thay đổi giá trị của biến, thì sử dụng "tham trị". Ngược lại, nếu bạn muốn thay đổi giá trị của biến sau khi gọi hàm, thì sử dụng "tham chiếu".

Hy vọng bài học này đã giúp bạn hiểu rõ hơn về sự khác biệt giữa "tham trị" và "tham chiếu" trong C++.

1