Tham biến là gì

Khi một hàm mà được định nghĩa và khai báo trong chương trình thì hàm main[], các hàm khác và thậm chí hàm đó có thể gọi đến chính nó [đệ quy]. Trong C/C++, có các cách truyền đối số [arguments] cho hàm như sau:

Truyền tham trị [dùng trong cả C và C++]

Khi truyền đối số kiểu tham trị, chương trình biên dịch sẽ copy giá trị của đối số để gán cho tham số của hàm [không tác động trực tiếp đến biến số truyền vào].

#include #include int sum[int a, int b] { a++; b++; return [a+b]; } void main[] { int x =1, y = 2; int s = 0; s = sum[x, y]; printf["\n s = %d", s]; printf["\n x = %d", x]; printf["\n y = %d", y]; getch[]; }
Truyền tham trị cho hàm

Trong ví dụ này, ta định nghĩa và khai báo hàm sum[] có kiểu trả về là int, 2 tham số a,b kiểu int. Khi gặp câu lệnh gọi hàm sum[] trong hàm main[]. Chương trình sẽ tạo ra 2 biến Local a,b trong hàm sum[]. Giá trị của đối số x,y truyền vào sẽ được copy và gán tương ứng cho 2 tham số a,b
[a = 1,b = 2]. Các câu lệnh tiếp theo trong hàm sum[] chỉ thao tác trên 2 biến Local a,b. Do vậy kết quả là giá trị biến x = 1 , y = 2.

Truyền tham biến

Phương pháp truyền tham biến là cách truyền địa chỉ của đối số cho các tham số tương ứng của hàm được gọi. Với cách truyền tham biến, giá trị của đối số truyền vào có thể bị thay đổi bởi việc gọi hàm.
Truyền tham biến chia ra thành 2 loại : truyền con trỏ [dùng trong C và C++] , truyền tham chiếu [chỉ dùng trong C++]

Truyền con trỏ [dùng trong C và C++]

#include #include void swap[int *a, int *b] { int temp; temp = *a; *a = *b; *b = temp; } void main[] { int x = 2, y = 3; swap[&x, &y]; printf["\nx = %d", x]; printf["\ny = %d", y]; getch[]; }
Truyền con trỏ cho hàm

Hàm swap[] làm nhiệm vụ đổi chỗ 2 biến nguyên x,y truyền vào. Đối số truyền vào ở đây là địa chỉ 2 biến x,y [&x , &y]. Trong hàm swap[], biến con trỏ a,b sẽ trỏ tới địa chỉ của biến x,y [a = &x, b = &y]. Và *a và *b chính là giá trị của 2 biến x,y. Các câu lệnh tiếp theo:

temp = *a; *a = *b; *b = temp;

Ta thấy, hàm swap[] đã thay đổi giá trị của đối số truyền vào.

Truyền tham chiếu [chỉ dùng trong C++]

#include #include void swap[int &a, int &b] { int temp; temp = a; a = b; b = temp; } void main[] { int x = 2, y = 3; swap[x, y]; printf["\nx = %d", x]; printf["\ny = %d", y]; getch[]; }
Truyền tham chiếu cho hàm

Hàm swap[] cũng làm nhiệm vụ hoán đổi vị trí giữa 2 biến nguyên truyền vào. Trong C++ cho phép sử dụng biến tham chiếu. + Biến tham chiếu không được cấp phát bộ nhớ, không có địa chỉ riêng. + Nó dùng làm bí danh cho một biến [kiểu giá trị] nào đó và nó sử dụng vùng nhớ của biến này. Trong hàm swap[], chương trình sẽ thực hiện lệnh gán sau: int &a = x; int &b = y; a,b ở đây là bí danh của biến x,y. Tức là biến a,b sẽ dùng chung vùng nhớ với biến số x,y.

Các cậu lệnh được thao tác trên biến a,b hay cũng chính là thao tác trên biến x,y. Do vậy, hàm swap[] sẽ thay đổi giá trị của đối số truyền vào.

Trong bài này mình sẽ giúp bạn hiểu hơn về tham trị và tham chiếu trong C++, đây là hai cách truyền tham số cho hàm C++ mà bạn nhất định phải biết.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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]. Cả hai đều có chung mục đích là truyền dữ liệu vào hàm, nhưng về tính chất thì có sự khác biệt rất rõ ràng.

Thuật ngữ modified trong hình trên có ý nghĩa là có thể thay đổi giá trị cho tham số Original value truyền vào. Vậy, khi tham số được gọi theo tham trị thì những thay đổi của tham số đó trong hàm sẽ không ảnh hưởng đến giá trị gốc của biến khi kết thúc hàm. Còn khi gọi theo kiểu tham trị thì có thay đổi.

Bài viết này được đăng tại [free tuts .net]

Để biết thêm chi tiết chúng ta sẽ cùng tìm hiểu trong nội dung sau nhé.

1. Gọi hàm kiểu 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ụ

#include using namespace std; void Show[int i] { i = 15; cout

Chủ Đề