You are on page 1of 1

MENU

VNCODING
HỌC LẬP TRÌNH A-Z

Truyền tham trị và tham biến


cho hàm
" February 16, 2016 # VietVH

Search for

Financial Hardship
1. ›
Loans

Best Bank For


2. ›
Saving Accounts

Free Trading
3. ›
Accounts
Ad Insider Choices

Contents [hide]

1 Truyền tham trị (dùng trong cả C và C++)


2 Truyền tham biến
2.1 Truyền con trỏ (dùng trong C và C++)
2.2 Truyền tham chiếu (chỉ dùng trong
C++)

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).

1 #include <stdio.h>
2 #include <conio.h>
3
4 int sum(int a, int b)
5 {
6 a++;
7 b++;
8 return (a+b);
9 }
10 void main()
11 {
12 int x =1, y = 2;
13 int s = 0;
14 s = sum(x, y);
15 printf("\n s = %d", s);
16 printf("\n x = %d", x);
17 printf("\n y = %d", y);
18 getch();
19 }

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++)


1 #include <stdio.h>
2 #include <conio.h>
3
4 void swap(int *a, int *b)
5 {
6 int temp;
7 temp = *a;
8 *a = *b;
9 *b = temp;
10 }
11 void main()
12 {
13 int x = 2, y = 3;
14 swap(&x, &y);
15 printf("\nx = %d", x);
16 printf("\ny = %d", y);
17 getch();
18 }

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:

1 temp = *a;
2 *a = *b;
3 *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++)
1 #include <stdio.h>
2 #include <conio.h>
3
4 void swap(int &a, int &b)
5 {
6 int temp;
7 temp = a;
8 a = b;
9 b = temp;
10 }
11 void main()
12 {
13 int x = 2, y = 3;
14 swap(x, y);
15 printf("\nx = %d", x);
16 printf("\ny = %d", y);
17 getch();
18 }

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.

! HÀM TRUYỀN ĐỐI SỐ

Search for
FINANCIAL HARDSHIP
1.
LOANS ›
BEST BANK FOR SAVING
2.
ACCOUNTS ›
FREE TRADING
3.
ACCOUNTS ›
APPLY FOR EMERGENCY
4.
LOAN ›
10 BEST STOCKS TO BUY
5.
TODAY ›
Ad Insider Choices

PREVIOUS ARTICLE
NEXT ARTICLE

BE THE FIRST TO COMMENT

Leave a Reply

You must be logged in to post a comment.

SEARCH …

VIDEO COURSE

1. 100 C/C++ interview questions


2. 500 C/C++ quiz
3. Learning C++ throughout game
4. Deep learning

EBOOK

1. 100 C/C++ interview questions


2. 500 C/C++ quiz
3. Learning C++ throughout game
4. Deep learning

CONTACT US

Email: viethv.dt@gmail.com
Skype: vietvh004

FOLLOW US

Facebook
Google+

Copyright © 2015-2024 | WordPress Theme by MH Themes

You might also like