Trong C++ hỗ trợ cho chúng ta 2 cách gọi hàm đó là tham trị (Call by value) và tham chiếu (call by reference). Trước khi đi vào tìm hiểu chi tiết từng cách một, chúng ta cùng xem sơ đồ sau:

Nhìn sơ đồ cũng cho chúng ta hiểu sơ sơ về tham trị và tham chiếu trong C++ là gì rồi đúng không? Để biết thêm chi tiết chúng ta sẽ cùng tìm hiểu trong nội dung sau nhé.

1. Tham trị trong C++

Tham trị trong C++ không làm thay đổi giá trị của tham số thực tế được truyền vào hàm. Tức là khi truyền giá trị của tham số thực tế vào hàm, thì giá trị của tham số thực tế sẽ được copy cho tham số hình thức của hàm, giá trị của tham số hình thức và tham số thực tế ở hai bộ nhớ khác nhau, vì vậy thay đổi giá trị bên trong hàm không làm thay đổi giá trị của tham số thực tế truyền vào.

Ví dụ

Chúng ta cùng xem một ví dụ đơn giản về tham trị trong C++ như sau:

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
using namespace std;
void Show(int i) 
    i = 15; 
    cout << "Bien i ben trong ham, i = " << i << endl;
}
int main() 
    int i = 1; 
    cout << "Truoc khi truyen bien i vao ham, i = " << i << endl;
    Show(i); 
    cout << "Sau khi truyen bien i vao ham, i = " << i << endl;
    return 0; 
}

Và kết quả sau khi thực thi đoạn code trên:

2. Tham chiếu trong C++

Tham chiếu trong C++ sẽ làm thay đổi giá trị của biến truyền vào hàm bởi vì chúng ta truyền vào địa chỉ của nó.

Ở đây, địa chỉ của tham số thực tế được truyền vào hàm, vì vậy địa chỉ của tham số hình thức và tham số thực tế sẽ cùng địa chỉ trong bộ nhớ, cho nên khi thay đổi giá trị của tham số hình thức bên trong hàm, sẽ làm thay đổi giá trị gốc của tham số thực tế được truyền vào hàm.

Ví dụ

Để hiểu ví dụ về tham chiếu trong C++ trước hết bạn phải có kiến thức về con trỏ (pointer) trong C++ nhé!

Chúng ta cùng xem một ví dụ đơn giản về tham chiếu trong C++ đó là hoán đổi 2 giá trị của 2 biến cho nhau.

Ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream> 
using namespace std;
void swap(int *x, int *y) 
    int swap; 
    swap=*x; 
    *x=*y; 
    *y=swap; 
int main()  
{   
    int x;
    int y;
    x=2;
    y=3;
    cout << "Gia tri x truoc khi goi ham, x = " << x << endl;
    cout << "Gia tri y truoc khi goi ham, y = " << y << endl;
    swap(&x, &y); 
    cout << "Gia tri x sau khi goi ham, x = " << x << endl;
    cout << "Gia tri y sau khi goi ham, y = " << y << endl;
    return 0; 
}

Và kết quả sau khi thực thi đoạn code trên:

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

Chúng ta cùng tổng hợp điểm khác nhau giữa tham trị và tham chiếu trong C++ như trong bảng sau:

Tham tri Tham chiếu
Một bản sao 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 sẽ làm thay đổi biến truyền vào hàm
Tham số hình thức và tham số thực tế khác địa chỉ trong bộ nhớ Tham số hình thức và tham số thực tế cùng địa chỉ trong bộ nhớ

4. Kết luận

Vậy là trong bài học hôm nay chúng ta đã tìm hiểu xong 2 cách gọi hàm đó là tham trị và tham chiếu. Tùy vào mục đích sử dụng của mình mà lựa chọn cách gọi hàm cho phù hợp nhé.

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

Như vậy mình sẽ kết thúc bài học này tại đây nhé.

Theo:freetuts.net

 

ĐĂNG KÝ THÀNH VIÊN

NẾU NỘI DUNG HỮU ÍCH HÃY XEM QUẢNG CÁO ĐỂ ỦNG HỘ

NẾU NỘI DUNG HỮU ÍCH HÃY XEM QUẢNG CÁO ĐỂ ỦNG HỘ

Được quan tâm nhiều nhất

  • Phim Ngắn Đột Kích - Phiên bản 10 năm trước

  • Apple Watch Series 5 Teardown - Always on Display Explained

  • iPhone 11 Pro Max Teardown - Tiny Motherboard & BIG Battery!

  • Apple Watch Series 4 Teardown

Bạn thấy bài viết này thế nào?
Thể hiện yêu thương tác giả ở đây nhé!

Thích bài viết

thích

Chia sẻ ngay!

phuongle

Thành viên từ: 10/12/2019

Điểm uy tín: 5,987

SMod: 1,289 hướng dẫn đã chia sẻ

Team

Lập Trình Thành viên của Lập Trình

1 Thành viên

1,289 bài viết

Thêm bình luận

Bình luận bằng tài khoản Facebook

After viewing your support content - Please click advertisement for Support & Donate us team! Đóng