Xem thêm

Phân Biệt Tham Trị và Tham Chiếu Trong Lập Trình

Huy Erick
Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách phân biệt giữa tham trị và tham chiếu. Để giải thích một cách dễ hiểu, chúng ta sẽ sử dụng bài toán "Hoán đổi...

Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách phân biệt giữa tham trị và tham chiếu. Để giải thích một cách dễ hiểu, chúng ta sẽ sử dụng bài toán "Hoán đổi giá trị 2 biến kiểu nguyên".

Tham Trị

Đầu tiên, hãy xem đoạn code sau:

void swap(int a, int b) {     int temp = a;     a = b;     b = temp; }  int main() {     int a = 9, b = 2;     swap(a, b);     printf("a = %d, b = %d", a, b);     return 0; }

Sau khi chạy đoạn code trên, chúng ta nhận thấy giá trị của 2 biến ab vẫn không thay đổi. Điều này xảy ra vì khi chúng ta sử dụng tham trị, một bản sao của biến được tạo ra trong hàm swap. Mọi thay đổi sẽ chỉ áp dụng trên biến sao chép này và không ảnh hưởng đến giá trị ban đầu của biến gốc.

Tham Chiếu

Bây giờ, hãy xem đoạn code sau khi sử dụng tham chiếu:

void swap(int &a, int &b) {     int temp = a;     a = b;     b = temp; }  int main() {     int a = 9, b = 2;     swap(a, b);     printf("a = %d, b = %d", a, b);     return 0; }

Khi chạy đoạn code này, chúng ta thấy rằng giá trị của 2 biến ab đã được hoán đổi cho nhau. Điều này xảy ra vì khi chúng ta sử dụng tham chiếu, chính xác là biến gốc được truyền vào hàm swap. Mọi thay đổi áp dụng trực tiếp lên biến gốc này, không có bản sao nào được tạo ra.

Mâu Thuẫn Với Địa Chỉ

Để tìm hiểu sâu hơn về tham trị và tham chiếu, hãy xem đoạn code sau:

void swap1(int a, int b) {     int temp = a;     a = b;     b = temp;     printf("[swap1] address of a is %d", &a); }  void swap2(int &a, int &b) {     int temp = a;     a = b;     b = temp;     printf("[swap2] address of a is %d", &a); }  int main() {     int a = 9, b = 2;     printf("[Main] address of a is %d", &a);     swap1(a, b);     swap2(a, b);     return 0; }

Sau khi chạy đoạn code này, chúng ta có thể thấy rằng sau khi hàm swap1 (sử dụng tham trị) chạy, địa chỉ của biến a đã bị thay đổi. Tuy nhiên, khi hàm swap2 (sử dụng tham chiếu) chạy, địa chỉ của biến a vẫn giống với địa chỉ ban đầu.

Kết Luận

Để giải quyết sự mâu thuẫn trên, chúng ta phải nhận thức rằng khi sử dụng tham trị, một biến mới (a') được tạo ra và lấy giá trị của biến gốc (a). Mọi thay đổi sẽ áp dụng trên biến mới này. Khi hàm kết thúc, biến a' sẽ bị giải phóng và biến gốc a vẫn giữ nguyên giá trị ban đầu. Trong khi đó, khi sử dụng tham chiếu, biến được truyền vào chính là biến gốc, thay đổi sẽ ảnh hưởng trực tiếp lên biến gốc mà không tạo ra bất kỳ bản sao nào.

Hi vọng sau khi đọc bài viết này, các bạn đã hiểu rõ hơn về khái niệm tham trị và tham chiếu và có thể sử dụng chúng một cách hiệu quả trong lập trình. Cảm ơn anh Quốc Cường đã giúp đỡ trong việc thực hiện bài viết này!

kết quả! kết quả!

1