You are on page 1of 71

Function (P.

1)

ThS.
Trần Ngọc Bảo Duy

HÀM (P.1)
Khái niệm về hàm
Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Kỹ thuật Lập trình (CO1027) Tự định nghĩa một


Ngày 20 tháng 3 năm 2021 hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

ThS. Trần Ngọc Bảo Duy Truyền tham số cho


hàm
Khoa Khoa học và Kỹ thuật Máy tính Truyền bằng trị
Truyền bằng tham chiếu
Trường Đại học Bách Khoa, ĐHQG-HCM

Function (P.1).1
Function (P.1)
Tổng quan
ThS.
Trần Ngọc Bảo Duy

1 Khái niệm về hàm


Hàm là gì?
Tại sao phải sử dụng hàm?
Khái niệm về hàm
Hàm main và hàm thư viện Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

2 Tự định nghĩa một hàm Tự định nghĩa một


hàm
Tự định nghĩa một hàm Tự định nghĩa một hàm

Các nguyên tắc thực thi khi gọi hàm Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Tổ chức mã nguồn Hàm inline

Hàm inline Truyền tham số cho


hàm
Truyền bằng trị

3 Truyền tham số cho hàm Truyền bằng tham chiếu

Truyền bằng trị


Truyền bằng tham chiếu

Function (P.1).2
Function (P.1)

ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


Hàm là gì?
Tại sao phải sử dụng hàm?

KHÁI NIỆM VỀ HÀM


Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).3
Function (P.1)
Hàm là gì?
ThS.
Trần Ngọc Bảo Duy

Định nghĩa
Hàm là một đơn vị xử lý bao gồm một chuỗi các lệnh có
liên quan, được thực hiện cùng nhau để hoàn thành một
Khái niệm về hàm
công việc nào đó. Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).4
Function (P.1)
Hàm là gì?
ThS.
Trần Ngọc Bảo Duy

Định nghĩa
Hàm là một đơn vị xử lý bao gồm một chuỗi các lệnh có
liên quan, được thực hiện cùng nhau để hoàn thành một
Khái niệm về hàm
công việc nào đó. Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Ví dụ Tự định nghĩa một


hàm
Trong thư viện <math.h>: Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
• Hàm sin(x): Là chuỗi các lệnh tính toán để tính giá Tổ chức mã nguồn
Hàm inline
trị sin của một góc x được truyền vào, góc x có đơn vị
Truyền tham số cho
tính là radian; hàm sin(x) trả về một số thực. hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).4
Function (P.1)
Hàm là gì?
ThS.
Trần Ngọc Bảo Duy

Định nghĩa
Hàm là một đơn vị xử lý bao gồm một chuỗi các lệnh có
liên quan, được thực hiện cùng nhau để hoàn thành một
Khái niệm về hàm
công việc nào đó. Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Ví dụ Tự định nghĩa một


hàm
Trong thư viện <math.h>: Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
• Hàm sin(x): Là chuỗi các lệnh tính toán để tính giá Tổ chức mã nguồn
Hàm inline
trị sin của một góc x được truyền vào, góc x có đơn vị
Truyền tham số cho
tính là radian; hàm sin(x) trả về một số thực. hàm
Truyền bằng trị
• Hàm sqrt(x): Là chuỗi các lệnh tính toán để tính căn Truyền bằng tham chiếu

bậc 2 của đại lượng x được truyền vào, đại lượng x


có đơn vị tính là một số thực (float hay double); hàm
sqrt(x) trả về một số thực.

Function (P.1).4
Function (P.1)
Hàm là gì?
ThS.
Trần Ngọc Bảo Duy

Như vậy, hàm là một đơn vị tính toán:


• Nhận giá trị đầu vào. Khái niệm về hàm

• Tính toán. Hàm là gì?


Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
• Trả về giá trị. Tự định nghĩa một
hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).5
Function (P.1)
Hàm là gì?
ThS.
Trần Ngọc Bảo Duy

Như vậy, hàm là một đơn vị tính toán:


• Nhận giá trị đầu vào. Khái niệm về hàm

• Tính toán. Hàm là gì?


Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
• Trả về giá trị. Tự định nghĩa một
hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Các giá trị Chuỗi lệnh Các giá trị Truyền tham số cho
hàm
đầu vào của hàm đầu ra Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).5
Function (P.1)
Lý do sử dụng hàm
ThS.
Trần Ngọc Bảo Duy

1 Tránh lặp lại mã nguồn.


Khái niệm về hàm
Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).6
Function (P.1)
Lý do sử dụng hàm
ThS.
Trần Ngọc Bảo Duy

1 Tránh lặp lại mã nguồn.


• Tiết kiệm thời gian phát triển. Khái niệm về hàm
• Thay đổi đoạn mã nguồn trong hàm nhanh và dễ dàng, Hàm là gì?
Tại sao phải sử dụng hàm?
chỉ tại một nơi. Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).6
Function (P.1)
Lý do sử dụng hàm
ThS.
Trần Ngọc Bảo Duy

1 Tránh lặp lại mã nguồn.


• Tiết kiệm thời gian phát triển. Khái niệm về hàm
• Thay đổi đoạn mã nguồn trong hàm nhanh và dễ dàng, Hàm là gì?
Tại sao phải sử dụng hàm?
chỉ tại một nơi. Hàm main và hàm thư viện

2 Sử dụng lại một đơn vị tính toán mà không cần phải Tự định nghĩa một
hàm
viết lại. Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
• Tiết kiệm thời gian phát triển. hàm
Tổ chức mã nguồn
• Có thể chia sẽ đơn vị tính toán không chỉ cho một dự Hàm inline

án mà cho nhiều dự án. Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).6
Function (P.1)
Lý do sử dụng hàm
ThS.
Trần Ngọc Bảo Duy

1 Tránh lặp lại mã nguồn.


• Tiết kiệm thời gian phát triển. Khái niệm về hàm
• Thay đổi đoạn mã nguồn trong hàm nhanh và dễ dàng, Hàm là gì?
Tại sao phải sử dụng hàm?
chỉ tại một nơi. Hàm main và hàm thư viện

2 Sử dụng lại một đơn vị tính toán mà không cần phải Tự định nghĩa một
hàm
viết lại. Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
• Tiết kiệm thời gian phát triển. hàm
Tổ chức mã nguồn
• Có thể chia sẽ đơn vị tính toán không chỉ cho một dự Hàm inline

án mà cho nhiều dự án. Truyền tham số cho


hàm
3 Giúp cho việc phát triển giải thuật, việc tổ chức chương Truyền bằng trị
Truyền bằng tham chiếu
trình dễ dàng.

Function (P.1).6
Function (P.1)
Hàm main
ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

int main () { Tự định nghĩa một


// Some commands hàm
Tự định nghĩa một hàm

return 0; Các nguyên tắc thực thi khi gọi


hàm

} Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).7
Function (P.1)
Hàm main
ThS.
Trần Ngọc Bảo Duy

Giá trị trả về: kiểu số nguyên int

Khái niệm về hàm


Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

int main () { Tự định nghĩa một


// Some commands hàm
Tự định nghĩa một hàm

return 0; Các nguyên tắc thực thi khi gọi


hàm

} Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).7
Function (P.1)
Hàm main
ThS.
Trần Ngọc Bảo Duy

Tên hàm: main.


Khái niệm về hàm
Hàm là gì?
Tại sao phải sử dụng hàm?

int main () { Hàm main và hàm thư viện

Tự định nghĩa một


// Some commands hàm
return 0; Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi

} hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


Lưu ý: Mỗi chương trình chỉ có 1 và chỉ 1 hàm main. hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).7
Function (P.1)
Hàm main
ThS.
Trần Ngọc Bảo Duy

int main () {
// Some commands Khái niệm về hàm
Hàm là gì?
return 0; Tại sao phải sử dụng hàm?

} Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Trả về giá trị cho bên gọi hàm main Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Giá trị trả về của hàm main: Hàm inline

• Phải là kiểu int. Truyền tham số cho


hàm
• Có thể là một trong 2 hằng số: Truyền bằng trị
Truyền bằng tham chiếu

• EXIT_SUCCESS hoặc 0: nếu chương trình kết thúc thành


công.
• EXIT_FAILURE hoặc 1: nếu chương trình kết thúc với lỗi
nào đó.

Function (P.1).7
Function (P.1)
Truyền tham số vào dòng lệnh
ThS.
Trần Ngọc Bảo Duy

int main ( int argc , char * argv []) {


cout << " So ␣ thong ␣ so : ␣ " << argc << endl ;
Khái niệm về hàm
Hàm là gì?

for ( int i = 0; i < argc ; i ++) Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
cout << " Thong ␣ so ␣ thu ␣ " << i << " : ␣ "
Tự định nghĩa một
<< argv [ i ] << endl ; hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
return EXIT_SUCCESS ; hàm
Tổ chức mã nguồn
} Hàm inline

Sau khi dịch thành công thành file main, chạy: Truyền tham số cho
hàm
Truyền bằng trị

./main abc bcd c12 Truyền bằng tham chiếu

Function (P.1).8
Function (P.1)
Truyền tham số vào dòng lệnh
ThS.
Trần Ngọc Bảo Duy

int main ( int argc , char * argv []) {


cout << " So ␣ thong ␣ so : ␣ " << argc << endl ;

for ( int i = 0; i < argc ; i ++) Khái niệm về hàm


Hàm là gì?
cout << " Thong ␣ so ␣ thu ␣ " << i << " : ␣ " Tại sao phải sử dụng hàm?

<< argv [ i ] << endl ; Hàm main và hàm thư viện

Tự định nghĩa một


hàm
return EXIT_SUCCESS ; Tự định nghĩa một hàm
} Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Kết quả thực thi của chương trình: Hàm inline

So thong so: 4 Truyền tham số cho


hàm
Thong so thu 0: ./main Truyền bằng trị
Truyền bằng tham chiếu
Thong so thu 1: abc
Thong so thu 2: bcd
Thong so thu 3: c12

Function (P.1).8
Function (P.1)
Truyền tham số vào dòng lệnh
ThS.
Trần Ngọc Bảo Duy

int main ( int argc , char * argv []) {


cout << " So ␣ thong ␣ so : ␣ " << argc << endl ;
Khái niệm về hàm
for ( int i = 0; i < argc ; i ++) Hàm là gì?
Tại sao phải sử dụng hàm?
cout << " Thong ␣ so ␣ thu ␣ " << i << " : ␣ " Hàm main và hàm thư viện

<< argv [ i ] << endl ; Tự định nghĩa một


hàm
Tự định nghĩa một hàm
return EXIT_SUCCESS ; Các nguyên tắc thực thi khi gọi
hàm
} Tổ chức mã nguồn
Hàm inline

1 argc: số lượng các thông số, kể cả tên chương trình. Truyền tham số cho
hàm
2 argv:một danh sách các chuỗi, mỗi chuỗi là một thông Truyền bằng trị
Truyền bằng tham chiếu
số. Khi truyền vào, tất cả các dữ liệu điều được hiểu
như chuỗi.

Function (P.1).8
Function (P.1)
Hàm thư viện
ThS.
Trần Ngọc Bảo Duy

1 Dùng chỉ thị tiền xử lý #include để thông báo với trình Khái niệm về hàm
Hàm là gì?
biên dịch là có một sử dụng một thư viện nào đó. Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
Ví dụ: #include <math.h>. Tự định nghĩa một
hàm

2 Gọi các hàm cần thiết. Khi gọi một hàm chỉ cần biết: Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi

• Tên hàm và công dụng của hàm. hàm


Tổ chức mã nguồn

• Các giá trị cần cung cấp cho hàm. Hàm inline

• Giá trị trả về của hàm. Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).9
Function (P.1)

ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm

TỰ ĐỊNH NGHĨA
Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm

MỘT HÀM Tự định nghĩa một hàm


Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).10
Function (P.1)
Sử dụng hàm tự tạo
ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


1 Tạo ra hàm: Hàm là gì?
Tại sao phải sử dụng hàm?

• Mô tả một hàm.
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
• Hiện thực hàm. Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

2 Gọi hàm. Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).11
Function (P.1)
Định nghĩa hàm, Gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 # include < iostream > Phần mô tả một hàm, gồm:


2 using namespace std ; Khái niệm về hàm
1 Kiểu giá trị trả về: int. Hàm là gì?
3 Tại sao phải sử dụng hàm?
2 Tên hàm: add.
4 int add ( int a , int b ) Hàm main và hàm thư viện

3 Các thông số: giá trị đầu Tự định nghĩa một


5 {
vào. hàm
6 int c = a + b ;
Ví dụ này có: Tự định nghĩa một hàm

7 return c ; Các nguyên tắc thực thi khi gọi


• TS I: a (int). hàm
8 } • TS II: b (int). Tổ chức mã nguồn
Hàm inline
9
10 int main () { • DS TS: bắt đầu bằng (, Truyền tham số cho
hàm
11 cout << add (10 , 15) ; kết thúc bằng ). Truyền bằng trị

12 return 0; • Các TS cách nhau bằng Truyền bằng tham chiếu

13 } dấu phẩy ,.

Function (P.1).12
Function (P.1)
Định nghĩa hàm, Gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 # include < iostream >


2 using namespace std ; Khái niệm về hàm
Hàm là gì?
3 Phần thân của hàm, gồm: Gồm Tại sao phải sử dụng hàm?

4 int add ( int a , int b ) các câu lệnh được thực hiện Hàm main và hàm thư viện

5 { cùng nhau, lần lượt. Ở ví dụ này: Tự định nghĩa một


hàm
6 int c = a + b ; có 3 lệnh trong thân hàm.
Tự định nghĩa một hàm

7 return c ; Các nguyên tắc thực thi khi gọi


Dùng câu lệnh return để chấm hàm
8 } dứt thực thi hàm và trả điều Tổ chức mã nguồn
Hàm inline
9 khiển về cho hàm gọi, chuyển
int main () { Truyền tham số cho
10 thực thi về lệnh kế sau lệnh gọi hàm
11 cout << add (10 , 15) ; hàm. Truyền bằng trị

12 return 0; Truyền bằng tham chiếu

13 }

Function (P.1).12
Function (P.1)
Định nghĩa hàm, Gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 # include < iostream >


2 using namespace std ; Khái niệm về hàm
Hàm là gì?
3 Lời gọi hàm: Dùng tên hàm và Tại sao phải sử dụng hàm?

4 int add ( int a , int b ) truyền vào các giá trị cho các Hàm main và hàm thư viện

5 { tham số của hàm: Tự định nghĩa một


hàm
6 int c = a + b ; • Thứ tự truyền vào quyết
Tự định nghĩa một hàm

7 return c ; định giá trị nào sẽ được Các nguyên tắc thực thi khi gọi
hàm
8 } truyền cho thông số nào. Tổ chức mã nguồn

9
• Phải truyền đủ (không Hàm inline

10 int main () { thiếu, không thừa) tất cả Truyền tham số cho


các tham số. hàm
11 cout << add (10 , 15) ; Truyền bằng trị

12 return 0; Truyền bằng tham chiếu

13 }

Function (P.1).12
Function (P.1)
Giá trị trả về của hàm
ThS.
Trần Ngọc Bảo Duy

• Để hàm trả về một giá trị, ta phải sử dụng câu lệnh


return trong thân hàm. Cú pháp như sau:
return value; hoặc return value;
Khái niệm về hàm
Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).13
Function (P.1)
Giá trị trả về của hàm
ThS.
Trần Ngọc Bảo Duy

• Để hàm trả về một giá trị, ta phải sử dụng câu lệnh


return trong thân hàm. Cú pháp như sau:
return value; hoặc return value;
Khái niệm về hàm
• Kiểu của giá trị trả về (kiểu trả về) đã sử dụng lúc định Hàm là gì?
Tại sao phải sử dụng hàm?
nghĩa hàm phải phù hợp với kiểu của biểu thức trả về Hàm main và hàm thư viện

(value). Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).13
Function (P.1)
Giá trị trả về của hàm
ThS.
Trần Ngọc Bảo Duy

• Để hàm trả về một giá trị, ta phải sử dụng câu lệnh


return trong thân hàm. Cú pháp như sau:
return value; hoặc return value;
Khái niệm về hàm
• Kiểu của giá trị trả về (kiểu trả về) đã sử dụng lúc định Hàm là gì?
Tại sao phải sử dụng hàm?
nghĩa hàm phải phù hợp với kiểu của biểu thức trả về Hàm main và hàm thư viện

(value). Tự định nghĩa một


hàm
• Tất cả các hàm đều phải có ít nhất một lệnh return và Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi

lệnh đó phải được thực thi một lần. hàm


Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).13
Function (P.1)
Giá trị trả về của hàm
ThS.
Trần Ngọc Bảo Duy

• Để hàm trả về một giá trị, ta phải sử dụng câu lệnh


return trong thân hàm. Cú pháp như sau:
return value; hoặc return value;
Khái niệm về hàm
• Kiểu của giá trị trả về (kiểu trả về) đã sử dụng lúc định Hàm là gì?
Tại sao phải sử dụng hàm?
nghĩa hàm phải phù hợp với kiểu của biểu thức trả về Hàm main và hàm thư viện

(value). Tự định nghĩa một


hàm
• Tất cả các hàm đều phải có ít nhất một lệnh return và Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi

lệnh đó phải được thực thi một lần. hàm


Tổ chức mã nguồn

• Khi hàm thực thi lệnh return, các lệnh phía sau sẽ dừng Hàm inline

Truyền tham số cho


lại và hàm sẽ trả về kết quả tại đó. hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).13
Function (P.1)
Giá trị trả về của hàm
ThS.
Trần Ngọc Bảo Duy

• Để hàm trả về một giá trị, ta phải sử dụng câu lệnh


return trong thân hàm. Cú pháp như sau:
return value; hoặc return value;
Khái niệm về hàm
• Kiểu của giá trị trả về (kiểu trả về) đã sử dụng lúc định Hàm là gì?
Tại sao phải sử dụng hàm?
nghĩa hàm phải phù hợp với kiểu của biểu thức trả về Hàm main và hàm thư viện

(value). Tự định nghĩa một


hàm
• Tất cả các hàm đều phải có ít nhất một lệnh return và Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi

lệnh đó phải được thực thi một lần. hàm


Tổ chức mã nguồn

• Khi hàm thực thi lệnh return, các lệnh phía sau sẽ dừng Hàm inline

Truyền tham số cho


lại và hàm sẽ trả về kết quả tại đó. hàm
Truyền bằng trị
• Kiểu trả về mà trong thân hàm không cần có lệnh Truyền bằng tham chiếu

return là kiểu void. Khi đó lệnh return ; (là hợp lệ) và


giúp làm ngừng thực thi hàm. Hàm lúc đó có thể gọi
là thủ tục (procedure).

Function (P.1).13
Function (P.1)
Quá tải hàm (Function overloading)
ThS.
Trần Ngọc Bảo Duy

• C/C++ cho phép nhiều hàm cùng tên được định nghĩa,
miễn là các hàm này phải khác nhau về danh sách tham
số (về số lượng, về kiểu, về thứ tự của từng tham số). Khái niệm về hàm
Hàm là gì?
int add(int a, int b); Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
double add(double a, double b);
Tự định nghĩa một
int add(int a); hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).14
Function (P.1)
Quá tải hàm (Function overloading)
ThS.
Trần Ngọc Bảo Duy

• C/C++ cho phép nhiều hàm cùng tên được định nghĩa,
miễn là các hàm này phải khác nhau về danh sách tham Khái niệm về hàm
Hàm là gì?
số (về số lượng, về kiểu, về thứ tự của từng tham số). Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
• Một khi một hàm (được quá tải) được gọi, trình biên
Tự định nghĩa một
dịch sẽ lựa chọn chính xác hàm cần thực thi bằng cách hàm
Tự định nghĩa một hàm
đánh giá số lượng, kiểu và thứ tự của các đối số trong Các nguyên tắc thực thi khi gọi
hàm

lời gọi hàm. Tổ chức mã nguồn


Hàm inline

• Quá tải hàm thường được dùng để tạo ra các hàm có Truyền tham số cho
hàm
tên giống nhau để cùng thực hiện các tác vụ tương tự Truyền bằng trị

nhưng trên kiểu dữ liệu khác nhau. Truyền bằng tham chiếu

Function (P.1).14
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.

Khái niệm về hàm


Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).15
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.


2 Copy các thông số cho hàm được gọi.
Khái niệm về hàm
Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).15
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.


2 Copy các thông số cho hàm được gọi.
Khái niệm về hàm
3 Làm các công việc hệ thống khác. Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).15
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.


2 Copy các thông số cho hàm được gọi.
Khái niệm về hàm
3 Làm các công việc hệ thống khác. Hàm là gì?
Tại sao phải sử dụng hàm?

4 Chuyển điều khiển thực thi cho hàm được gọi để nó Hàm main và hàm thư viện

Tự định nghĩa một


thực thi lệnh đầu tiên trong hàm được gọi. hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).15
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.


2 Copy các thông số cho hàm được gọi.
Khái niệm về hàm
3 Làm các công việc hệ thống khác. Hàm là gì?
Tại sao phải sử dụng hàm?

4 Chuyển điều khiển thực thi cho hàm được gọi để nó Hàm main và hàm thư viện

Tự định nghĩa một


thực thi lệnh đầu tiên trong hàm được gọi. hàm
Tự định nghĩa một hàm
5 Hàm được gọi thực thi các lệnh. Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).15
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.


2 Copy các thông số cho hàm được gọi.
Khái niệm về hàm
3 Làm các công việc hệ thống khác. Hàm là gì?
Tại sao phải sử dụng hàm?

4 Chuyển điều khiển thực thi cho hàm được gọi để nó Hàm main và hàm thư viện

Tự định nghĩa một


thực thi lệnh đầu tiên trong hàm được gọi. hàm
Tự định nghĩa một hàm
5 Hàm được gọi thực thi các lệnh. Các nguyên tắc thực thi khi gọi
hàm

6 Khi hàm được gọi thực hiện lệnh return. Tổ chức mã nguồn
Hàm inline

• Giải phóng tất cả các biến cục bộ của nó. Truyền tham số cho
• Trả điều khiển về lệnh theo sau lệnh gọi hàm. hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).15
Function (P.1)
Các nguyên tắc thực thi khi gọi hàm
ThS.
Trần Ngọc Bảo Duy

1 Lưu vết: lệnh kế tiếp của lệnh gọi hàm.


2 Copy các thông số cho hàm được gọi.
Khái niệm về hàm
3 Làm các công việc hệ thống khác. Hàm là gì?
Tại sao phải sử dụng hàm?

4 Chuyển điều khiển thực thi cho hàm được gọi để nó Hàm main và hàm thư viện

Tự định nghĩa một


thực thi lệnh đầu tiên trong hàm được gọi. hàm
Tự định nghĩa một hàm
5 Hàm được gọi thực thi các lệnh. Các nguyên tắc thực thi khi gọi
hàm

6 Khi hàm được gọi thực hiện lệnh return. Tổ chức mã nguồn
Hàm inline

• Giải phóng tất cả các biến cục bộ của nó. Truyền tham số cho
• Trả điều khiển về lệnh theo sau lệnh gọi hàm. hàm
Truyền bằng trị

7 Hàm gọi giải phóng các thông số đã truyền và thực Truyền bằng tham chiếu

thi lệnh kế tiếp theo lệnh gọi hàm.

Function (P.1).15
Function (P.1)
Tổ chức mã nguồn
ThS.
Trần Ngọc Bảo Duy
int add ( int a , int b ) Phần mô tả (header)
{
int c ;
c = a + b; Phần thân hàm (body) Khái niệm về hàm
Hàm là gì?
return 0; Tại sao phải sử dụng hàm?

} Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).16
Function (P.1)
Tổ chức mã nguồn
ThS.
Trần Ngọc Bảo Duy
int add ( int a , int b ) Phần mô tả (header)
{
int c ;
c = a + b; Phần thân hàm (body) Khái niệm về hàm
Hàm là gì?
return 0; Tại sao phải sử dụng hàm?

} Hàm main và hàm thư viện

Tự định nghĩa một


hàm
Tự định nghĩa một hàm

Phần mô tả nên được tách riêng khỏi toàn bộ phần định Các nguyên tắc thực thi khi gọi
hàm

nghĩa một hàm. Tổ chức mã nguồn


Hàm inline

Lý do: Truyền tham số cho


hàm
1 Không cần quan tâm thứ tự các hàm trong mã nguồn. Truyền bằng trị
Truyền bằng tham chiếu

2 Dùng lại các hàm trong dự án hoặc nhiều dự án.


3 Phát triển thư viện các hàm: không cần chuyển giao
cho bên thứ 3 (người mua thư viện) mã nguồn phần
hiện thực các hàm.
Function (P.1).16
Function (P.1)
Tổ chức mã nguồn
ThS.
Trần Ngọc Bảo Duy

Tách rời phần mô tả


int add ( int a , int b ); của hàm add và đặt
trước hàm main. Khái niệm về hàm
int main () {
Hàm là gì?
cout << add (10 , 15); Tại sao phải sử dụng hàm?

return EXIT_SUCCESS ; Hàm main và hàm thư viện

} Tự định nghĩa một


hàm
Tự định nghĩa một hàm
int add ( int a , int b ) Các nguyên tắc thực thi khi gọi

{ Không cần thiết đặt hàm


Tổ chức mã nguồn

int c ; trước toàn bộ phần Hàm inline

c = a + b; định nghĩa cho hàm Truyền tham số cho


hàm
return 0;
add phía trước hàm Truyền bằng trị
} Truyền bằng tham chiếu
main.

Function (P.1).17
Function (P.1)
Hàm inline
ThS.
Trần Ngọc Bảo Duy

Định nghĩa Khái niệm về hàm


Hàm là gì?
Hàm inline là hàm có từ khoá inline đứng trước kiểu trả Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
về của hàm.
Tự định nghĩa một
hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).18
Function (P.1)
Hàm inline
ThS.
Trần Ngọc Bảo Duy

Định nghĩa Khái niệm về hàm


Hàm là gì?
Hàm inline là hàm có từ khoá inline đứng trước kiểu trả Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện
về của hàm.
Tự định nghĩa một
hàm
Tự định nghĩa một hàm
Ví dụ Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
inline int add(int a, int b); Hàm inline

inline int foo(int a); Truyền tham số cho


hàm
inline int bar(int a[], int size); Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).18
Function (P.1)
Hàm inline
ThS.
Trần Ngọc Bảo Duy

Hàm inline: Thay vì làm


các thủ tục để goị hàm và
Hàm không inline: Tốn chi trả về từ hàm được gọi, mã
Khái niệm về hàm
Hàm là gì?

phí thực thi khi gọi hàm: thực thi của hàm inline được Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

• COPY các tham số. chèn trực tiếp tại vị trí gọi Tự định nghĩa một
hàm
• Lưu trữ các thanh ghi. hàm này: Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
• Phục hồi các thanh ghi. • Tiết kiệm chi phí gọi hàm hàm
Tổ chức mã nguồn

• Giải phóng các tham số. • Làm tăng kích thước tập Hàm inline

Truyền tham số cho


• ... tin thực thi nếu gọi hàm hàm

inline có đoạn mã thực thi Truyền bằng trị


Truyền bằng tham chiếu

lớn và nhiều lần.

Function (P.1).19
Function (P.1)

ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


Hàm là gì?

TRUYỀN THAM SỐ Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện

Tự định nghĩa một


hàm

CHO HÀM Tự định nghĩa một hàm


Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).20
Function (P.1)
Tham số và đối số
ThS.
Trần Ngọc Bảo Duy

int add ( int a , int b );


Khái niệm về hàm
Hàm là gì?
Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

int main () { Tự định nghĩa một


cout << add (10 , 15 ); hàm
Tự định nghĩa một hàm
return EXIT_SUCCESS ; Các nguyên tắc thực thi khi gọi
} hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


• 10: là đối số của tham số a. hàm
Truyền bằng trị

• 15: là đối số của tham số b. Truyền bằng tham chiếu

Function (P.1).21
Function (P.1)
Hai kiểu truyền tham số cho hàm
ThS.
Trần Ngọc Bảo Duy

• Truyền bằng trị: Được sử dụng khi KHÔNG CHO Khái niệm về hàm
Hàm là gì?

PHÉP hàm được gọi thay đổi giá trị đối. Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

• Truyền bằng tham chiếu: Tự định nghĩa một


hàm
• Được sử khi MUỐN CHO PHÉP hàm được gọi thay Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
đổi giá trị đối. hàm
Tổ chức mã nguồn
• Khi không muốn bộ thực thi tốn nhiều thời gian cho Hàm inline

việc chuẩn bị tham số của hàm được gọi. Truyền tham số cho
hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).22
Function (P.1)
Các kiểu truyền tham số: Dấu hiệu
ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


1 Truyền bằng trị: Hàm là gì?
Tại sao phải sử dụng hàm?
void swap(int a, int b); Hàm main và hàm thư viện

Lúc đó, a và b sẽ được truyền bằng trị. Tự định nghĩa một


hàm
Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).23
Function (P.1)
Các kiểu truyền tham số: Dấu hiệu
ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


1 Truyền bằng trị: Hàm là gì?
Tại sao phải sử dụng hàm?
void swap(int a, int b); Hàm main và hàm thư viện

Lúc đó, a và b sẽ được truyền bằng trị. Tự định nghĩa một


hàm

2 Truyền bằng tham chiếu: Tự định nghĩa một hàm


Các nguyên tắc thực thi khi gọi
hàm

void swap(int &a, int &b); Tổ chức mã nguồn


Hàm inline

Lúc đó, a và b sẽ được truyền bằng tham chiếu. Truyền tham số cho
hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).23
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

1 # include < iostream >


2 using namespace std ;
3
Khái niệm về hàm
4 void swap ( int a , int b ); Hàm là gì?
Tại sao phải sử dụng hàm?
5
Hàm main và hàm thư viện
6 int main () {
Tự định nghĩa một
7 int x = 10 , y = 100; hàm
Tự định nghĩa một hàm
8
Các nguyên tắc thực thi khi gọi
9 swap (x , y ); hàm
Tổ chức mã nguồn
10 swap (10 , 100); Hàm inline

11 swap ( x + 10 , y * 2); Truyền tham số cho


12 hàm
Truyền bằng trị
13 return 0; Truyền bằng tham chiếu
14 }

Đối số có thể là: biến

Function (P.1).24
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

1 # include < iostream >


2 using namespace std ;
3
Khái niệm về hàm
4 void swap ( int a , int b ); Hàm là gì?
Tại sao phải sử dụng hàm?
5
Hàm main và hàm thư viện
6 int main () {
Tự định nghĩa một
7 int x = 10 , y = 100; hàm
8 Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
9 swap (x , y ); hàm
Tổ chức mã nguồn
10 swap (10 , 100); Hàm inline
11 swap ( x + 10 , y * 2);
Truyền tham số cho
12 hàm
13 return 0; Truyền bằng trị
Truyền bằng tham chiếu
14 }

Đối số có thể là: hằng số

Function (P.1).24
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

1 # include < iostream >


2 using namespace std ;
3
Khái niệm về hàm
4 void swap ( int a , int b ); Hàm là gì?
Tại sao phải sử dụng hàm?
5
Hàm main và hàm thư viện
6 int main () {
Tự định nghĩa một
7 int x = 10 , y = 100; hàm
Tự định nghĩa một hàm
8
Các nguyên tắc thực thi khi gọi
9 swap (x , y ); hàm
Tổ chức mã nguồn
10 swap (10 , 100); Hàm inline

11 swap ( x + 10 , y * 2); Truyền tham số cho


12 hàm
Truyền bằng trị
13 return 0; Truyền bằng tham chiếu
14 }

Đối số có thể là: biểu thức

Function (P.1).24
Function (P.1)
Truyền bằng trị
ThS.
void swap ( int a , int b ) { Trần Ngọc Bảo Duy
int t = a ;
a = b;
b = t;
};
Khái niệm về hàm
Hàm là gì?
int main () { Tại sao phải sử dụng hàm?
int x = 10 , y = 100; Hàm main và hàm thư viện

cout << " Truoc : ␣ " ; Tự định nghĩa một


hàm
cout << x << " ␣ " << y << endl ; Tự định nghĩa một hàm
swap (x , y ); Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn

cout << " Sau : ␣ " << endl ; Hàm inline

cout << x << " ␣ " << y << endl ; Truyền tham số cho
hàm
Truyền bằng trị
return EXIT_SUCCESS ; Truyền bằng tham chiếu

Chương trình in ra:


Truoc: 10 100
Sau: 10 100 Function (P.1).25
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

a b
void swap ( int a , int b )
{
100
int t = a ; Khái niệm về hàm
Hàm là gì?
a = b; Tại sao phải sử dụng hàm?

b = t; Hàm main và hàm thư viện

} Tự định nghĩa một


hàm
Tự định nghĩa một hàm
int main () { Các nguyên tắc thực thi khi gọi
hàm
int x = 10; Tổ chức mã nguồn

int y = 100; Hàm inline

swap (x , y ); Truyền tham số cho


return EXIT_SUCCESS ; 10 100 hàm
Truyền bằng trị
} x y Truyền bằng tham chiếu

Function (P.1).26
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy
a b
void swap ( int a , int b )
{
10 100
int t = a ;
a = b; Khái niệm về hàm
Hàm là gì?
b = t; Tại sao phải sử dụng hàm?
} Hàm main và hàm thư viện

COPY giá trị Tự định nghĩa một


hàm
int main () {
Tự định nghĩa một hàm
int x = 10; Các nguyên tắc thực thi khi gọi
hàm
int y = 100; Tổ chức mã nguồn

swap (x , y ); Hàm inline

return EXIT_SUCCESS ; 10 100 Truyền tham số cho


hàm
} x y Truyền bằng trị
Truyền bằng tham chiếu

Lời gọi hàm swap(x, y) trong main khiến cho biến a và b


của giữ giá trị của x và y tương ứng; nghĩa là 10 và 100.

Function (P.1).26
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

a b
void swap ( int a , int b )
{
10 100
int t = a ; •
Khái niệm về hàm
a = b; Hàm là gì?

b = t; 10 Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện
} t
Tự định nghĩa một
hàm
int main () { Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int x = 10; hàm
Tổ chức mã nguồn
int y = 100; Hàm inline
swap (x , y );
Truyền tham số cho
return EXIT_SUCCESS ; 10 100 hàm
} x y Truyền bằng trị
Truyền bằng tham chiếu

Biến t được tạo ra và chứa giá trị của a, nghĩa là 10.

Function (P.1).26
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

a b
void swap ( int a , int b )
{
100 100
int t = a ;
Khái niệm về hàm
a = b; • Hàm là gì?

b = t; 10 Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện
} t
Tự định nghĩa một
hàm
int main () { Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int x = 10; hàm
Tổ chức mã nguồn
int y = 100; Hàm inline
swap (x , y );
Truyền tham số cho
return EXIT_SUCCESS ; 10 100 hàm
} x y Truyền bằng trị
Truyền bằng tham chiếu

Biến a có có trị của b nghĩa là 100.

Function (P.1).26
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy

a b
void swap ( int a , int b )
{
100 10
int t = a ;
Khái niệm về hàm
a = b; Hàm là gì?

b = t; • 10 Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện
} t
Tự định nghĩa một
hàm
int main () { Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int x = 10; hàm
Tổ chức mã nguồn
int y = 100; Hàm inline
swap (x , y );
Truyền tham số cho
return EXIT_SUCCESS ; 10 100 hàm
} x y Truyền bằng trị
Truyền bằng tham chiếu

Biến b có có trị của t nghĩa là 10.

Function (P.1).26
Function (P.1)
Truyền bằng trị
ThS.
Trần Ngọc Bảo Duy
a b
void swap ( int a , int b )
{
100 10
int t = a ;
a = b;
Khái niệm về hàm
b = t; 10 Hàm là gì?

} t Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện

Tự định nghĩa một


int main () { hàm
int x = 10; Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int y = 100; hàm
Tổ chức mã nguồn
swap (x , y ); Hàm inline
return EXIT_SUCCESS ; 10 100
Truyền tham số cho
} x y hàm
Truyền bằng trị
Truyền bằng tham chiếu

Hoàn tất hoán đổi giá trị a và b, không chạm gì đến x và


y ở hàm main. Do đó, khi nó kết thúc hai biến x và y trong
main vẫn giữ nguyên giá trị.

Function (P.1).26
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

Khái niệm về hàm


Định nghĩa Hàm là gì?
Tại sao phải sử dụng hàm?
Truyền bằng tham chiếu là một phương pháp mà tham Hàm main và hàm thư viện

số ở đó không tạo ra bản sao, hoạt động như một tên gọi Tự định nghĩa một
hàm
khác (bí danh) của đối số. Điều này làm cho hiệu suất tốt Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hơn nếu đối số là kiểu dữ liệu có kích thước lớn. hàm
Tổ chức mã nguồn
Vì vậy, mọi thao tác trên tham số truyền bằng tham chiếu Hàm inline

cũng làm thay đổi giá trị của đối số. Truyền tham số cho
hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).27
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ; Khái niệm về hàm
Hàm là gì?
a = b; Tại sao phải sử dụng hàm?

b = t; Hàm main và hàm thư viện

} Tự định nghĩa một


hàm
Tự định nghĩa một hàm
int main () { Các nguyên tắc thực thi khi gọi
hàm
int x = 10; 10 100 Tổ chức mã nguồn

int y = 100; y
Hàm inline
x
swap (x , y ); Truyền tham số cho
hàm
return EXIT_SUCCESS ; Truyền bằng trị
} Truyền bằng tham chiếu

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b ) •


{
int t = a ;
a = b; Khái niệm về hàm
Hàm là gì?
b = t; Tại sao phải sử dụng hàm?

} Hàm main và hàm thư viện

Tự định nghĩa một


hàm
int main () { Tự định nghĩa một hàm
int x = 10; 10 100 Các nguyên tắc thực thi khi gọi
hàm
int y = 100; x, a y, b Tổ chức mã nguồn

swap (x , y ); Hàm inline

return EXIT_SUCCESS ; Truyền tham số cho


hàm
} Truyền bằng trị
Truyền bằng tham chiếu

Cấp một bí danh (alias) cho vùng nhớ của x và y là tên của
hai tham số a và b.

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ; •
t
a = b; Khái niệm về hàm
b = t; 10 Hàm là gì?
Tại sao phải sử dụng hàm?
} Hàm main và hàm thư viện

Tự định nghĩa một


hàm
int main () {
Tự định nghĩa một hàm
int x = 10; 10 100 Các nguyên tắc thực thi khi gọi
hàm
int y = 100; x, a y, b Tổ chức mã nguồn

swap (x , y ); Hàm inline

return EXIT_SUCCESS ; Truyền tham số cho


hàm
} Truyền bằng trị
Truyền bằng tham chiếu

Biến t được tạo ra và chứa giá trị của a (cũng là của x),
nghĩa là 10.

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ;
t Khái niệm về hàm
a = b; • Hàm là gì?

b = t; 10 Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện
}
Tự định nghĩa một
hàm
int main () { Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int x = 10; 100 100 hàm
Tổ chức mã nguồn
int y = 100; x, a y, b Hàm inline
swap (x , y );
Truyền tham số cho
return EXIT_SUCCESS ; hàm
} Truyền bằng trị
Truyền bằng tham chiếu

Biến a (cũng là x) có có trị của b nghĩa là 100.

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ;
t Khái niệm về hàm
a = b; Hàm là gì?

b = t; • 10 Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện
}
Tự định nghĩa một
hàm
int main () { Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int x = 10; 100 10 hàm
Tổ chức mã nguồn
int y = 100; x, a y, b Hàm inline
swap (x , y );
Truyền tham số cho
return EXIT_SUCCESS ; hàm
} Truyền bằng trị
Truyền bằng tham chiếu

Biến b (cũng là y) có có trị của t nghĩa là 10.

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ;
t
a = b;
Khái niệm về hàm
b = t; 10 Hàm là gì?

} Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện

Tự định nghĩa một


int main () { hàm
int x = 10; 100 10 Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int y = 100; x, a hàm
y, b Tổ chức mã nguồn
swap (x , y ); Hàm inline
return EXIT_SUCCESS ;
Truyền tham số cho
} hàm
Truyền bằng trị
Truyền bằng tham chiếu

Hoàn tất hoán đổi giá trị a và b, đồng thời cũng là trao đổi
giữa x và y. Do đó, khi nó kết thúc hai biến x và y trong
main bị thay đổi giá trị.

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ;
t
a = b; Khái niệm về hàm
b = t; 10 Hàm là gì?

} Tại sao phải sử dụng hàm?


Hàm main và hàm thư viện

Tự định nghĩa một


int main () { hàm
int x = 10; 100 10 Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
int y = 100; x, a hàm
y, b Tổ chức mã nguồn
swap (x , y ); Hàm inline
return EXIT_SUCCESS ;
Truyền tham số cho
} hàm
Truyền bằng trị
Truyền bằng tham chiếu

Do tên tham số chỉ là một bí danh của một ô nhớ cho trước
nên đối số KHÔNG THỂ LÀ biến và biểu thức mà CHỈ
CÓ THỂ LÀ biến.

Function (P.1).28
Function (P.1)
Truyền bằng tham chiếu
ThS.
Trần Ngọc Bảo Duy

void swap ( int &a , int & b )


{
int t = a ;
t
a = b;
b = t; 10 Khái niệm về hàm
Hàm là gì?
} Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

int main () { Tự định nghĩa một


hàm
int x = 10; 100 10 Tự định nghĩa một hàm

int y = 100; x, a
Các nguyên tắc thực thi khi gọi
y, b hàm

swap (x , y ); Tổ chức mã nguồn


Hàm inline
return EXIT_SUCCESS ;
Truyền tham số cho
} hàm
Truyền bằng trị
Truyền bằng tham chiếu

Ví dụ:
swap(x, y);
swap(10, 15);
swap(x + 10, y * 2);

Function (P.1).28
Function (P.1)
Truyền mảng vào hàm
ThS.
Trần Ngọc Bảo Duy

Để truyền mảng vào hàm để xử lý, cần truyền hai thông số


cho hàm như sau: Khái niệm về hàm
Hàm là gì?

1 Mảng giá trị: truyền địa chỉ của phần tử đầu tiên vào Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

hàm. Tự định nghĩa một


hàm
2 Số lượng phần tử của mảng. Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi
hàm
Tổ chức mã nguồn
Hàm inline

Truyền tham số cho


hàm
Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).29
Function (P.1)
Truyền mảng vào hàm
ThS.
Trần Ngọc Bảo Duy

Để truyền mảng vào hàm để xử lý, cần truyền hai thông số


cho hàm như sau: Khái niệm về hàm
Hàm là gì?

1 Mảng giá trị: truyền địa chỉ của phần tử đầu tiên vào Tại sao phải sử dụng hàm?
Hàm main và hàm thư viện

hàm. Tự định nghĩa một


hàm
2 Số lượng phần tử của mảng. Tự định nghĩa một hàm
Các nguyên tắc thực thi khi gọi

Cú pháp: hàm
Tổ chức mã nguồn
Hàm inline
1 void print1 ( int arr [ MAX_SIZE ] , int size );
Truyền tham số cho
2 void print2 ( int arr [] , int size ); hàm
3 void print3 ( int * arr , int size ); Truyền bằng trị
Truyền bằng tham chiếu

Function (P.1).29

You might also like