Search…

Các Phương Pháp Truyền Tham Số

20/09/20202 min read
Giới thiệu chi tiết về truyền theo tham chiếu và truyền theo tham trị trong hàm C++.

Có 2 cách truyền tham số cho hàm

  • Truyền tham trị
  • Truyền tham chiếu

Truyền tham trị

Hiểu một cách đơn giản thì truyền theo tham trị là truyền giá trị của tham số.

Khi hàm được gọi. Chương trình sẽ khởi tạo các ô nhớ tương ứng với danh sách tham số truyền vào. Sau đó sẽ sao chép các giá trị của tham số vào các ô nhớ mới này. Vì vậy những thay đổi trong ô nhớ mới này sẽ không ảnh hưởng đến các tham số truyền vào.

Xem chương trình tính tổng 2 số:

#include <iostream>
using namespace std;

int sum(int a, int b)
{
	return (a+b);
}

int main()
{
	int a = 2, b = 3;
	int s;
	s = sum(a, b); // Gán giá trị là tổng a và b cho biến s;
	cout << "Tong của a va b: " << s << endl;
	return 0;
}

Ví dụ trên là một kiểu truyền theo tham trị.

Xét một ví dụ khác, chương trình hoán đổi vị trí 2 số:

#include <iostream>
using namespace std;
void swap(int a, int b) { int tamp = a; a = b; b = tamp; } int main() { int a = 2, b = 3; cout << "Truoc khi hoan doi: " << a << ' ' << b << endl;; swap(a, b); // hoán đổi cout << "Sau khi hoan doi: " << a << ' ' << b << endl; return 0; }

Sau khi chạy chương trình trên sẽ thấy kết quả trước và sau vẫn không đổi. Lý do là bởi vì lúc truyền tham số, chương trình sẽ khởi tạo 2 ô nhớ khác và sao chép giá trị truyền vào. Nên mọi thay đổi trong hàm sẽ không ảnh hưởng đến chương trình chính.

Do đó không thể dùng cách truyền tham trị cho chương trình trên.

Truyền tham chiếu

Truyền tham chiếu làm thay đổi giá trị của biến truyền vào. Vì vậy, cách thao tác làm thay đổi trên địa chỉ truyền vào thì khi kết thúc hàm vẫn được giữ nguyên.

Xét lại chương trình hoán đổi vị trí (truyền theo tham chiếu)

#include <iostream>
using namespace std;
void swap(int &a, int &b) { int tamp = a; a = b; b = tamp; } int main() { int a = 2, b = 3; cout << "Truoc khi hoan doi: " << a << ' ' << b << endl;; swap(a, b); // hoán đổi cout << "Sau khi hoan doi: " << a << ' ' << b << endl; return 0; }

Khi chạy chương trình trên sẽ thấy giá trị của ab trước và sau đã được thay đổi.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024