Ch
ng 8. Hàm trong C
ươ
I. Khai báo hàm II. Đ nh nghĩa hàm ị III. S d ng hàm ử ụ IV. Con tr tr t i hàm ỏ ỏ ớ
1
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
I. Khai báo hàm
ề
ớ
1. Gi i thi u v hàm ệ 2. Cú pháp khai báo hàm 3. Các tham s trong khai báo hàm
ố
2
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
ề
ớ
ả
ư ẵ
i l p trình có i l p ườ ậ ể ạ
1. Gi i thi u v hàm ệ Trong C t t c các ch ng trình con đ u g i là hàm. ọ ề ươ ấ Ngoài các hàm th vi n có s n, ng ườ ậ ệ th t t o ra các hàm. Đ t o ra m t hàm ng ộ trình ph i khai báo và đ nh nghĩa nó. ị
Khai báo hàm (function declaration or prototype) là ng ể
ể ự ạ ả
ả ề ố ượ ủ ị
xác đ nh tên c a hàm, ki u d li u tr v , s l ữ ệ tham s và ki u c a t ng tham s . ố ủ ừ ố ể
ị
Đ nh nghĩa hàm (function definition) là xác đ nh công vi c mà hàm s th c hi n thông qua các l nh ự ệ c a hàm. ủ
Các hàm trong C không l ng nhau, t c là trong m t ộ ồ
ị ệ ẽ ệ
ứ
3
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
hàm ta không th đ nh nghĩa m t hàm khác. ể ị ộ
2. Cú pháp khai báo hàm
ộ
ế
Tên_tham_s _2,…);
Ki u_2 ể
ố
ố
ả
ể
Cú pháp khai báo hàm n m trên m t dòng, k t ằ thúc b ng d u ch m ph y. ấ ấ ằ ẩ Ki u_tr _v ề Tên_hàm(Ki u_1 Tên_tham_s _1, ể Ví d :ụ float inchtomet(float x); float tong(float a, float b);
ộ
ữ
ế
ố ượ
ủ
ế
ể
M t khai báo hàm không cho bi t nh ng gì có trong thân hàm. Nó ch báo cho trình biên d ch ị ỉ bi t v tên hàm, ki u c a hàm, s l ng các tham s và ki u c a các tham s . ố
ề ố
ủ
ể
4
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
2. Cú pháp khai báo hàm (ti p)ế
ọ ướ
Khai báo hàm có th đ t ấ
ố ươ
ể ứ
ể ườ ị
N u hàm đ
ư ể ặ ệ
c đ nh nghĩa đâu đó tr c khi g i b t kỳ đâu tr ể ặ ở ấ đ u t p ch a ch ng trình chính hàm. T t nh t là đ ể ở ầ ứ ệ c m t hàm s g i nó. (ch a hàm main) ho c đ tr ẽ ọ ộ ướ ặ ng trình nhi u file thì các khai báo hàm Trong các ch ề ươ th ng đ trong các file header có đuôi .h, còn các đ nh nghĩa hàm đ trong các file th vi n có đuôi obj ho c lib. ế ướ ượ ị
ể ầ
ấ
5
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
c khi g i hàm ọ ở thì có th không c n khai báo hàm. Tuy nhiên v n nên ẫ ng trình có có khai báo hàm nh t là trong các ch ươ nhi u hàm l n hay các ch ng trình n m trên nhi u file. ề ớ ươ ề ằ
3. Các tham s trong khai báo hàm
ố
ế
ố ể ố
ủ
N u hàm không có tham s thì trong d u ấ ngo c đ n c a khai báo hàm đ tr ng. Ví d : ụ ơ ặ int xoa();
Tên c a các tham s trong khai báo hàm có
ủ
ể
ầ
ố ị
th không c n xác đ nh. Ví d : ụ float inchtomet(float, float);
6
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
II. Đ nh nghĩa hàm
ị
ệ
1. Cú pháp đ nh nghĩa hàm ị 2. L nh return 3. Hàm không tr v giá tr ị
ả ề
7
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
1. Cú pháp đ nh nghĩa hàm ị
Ki u_tr _v
Tên_tham_s _1,
Tên_tham_s _2,…)
ả
ề Tên_hàm(Ki u_1
ể
ố
Ki u_2 ể
ố
ể {
//Các l nh c a hàm đ đây ủ
ể
ệ
Thân hàm
Không có d u ch m ấ ấ ph yẩ
} Ví d :ụ int cong(int a, int b)
{ int z; z = a + b; return z; }
8
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
1. Cú pháp đ nh nghĩa hàm (ti p)
ế
ị
ầ
ố
ấ
ố ắ
ộ
ả
ẩ
Dòng đ u tiên trong đ nh nghĩa hàm gi ng ị trong khai báo hàm, ch khác là không có d u ỉ ch m ph y và các tham s b t bu c ph i có ấ tên.
ị
ể
ườ
ộ
ể ệ
ặ ớ
ế
ể
ươ
ớ
ế
ị
Khi đã có khai báo hàm thì đ nh nghĩa hàm ng đ sau hàm main ho c đ trong m t th t p obj (lib). Đ quen d n v i vi c vi t các ầ ệ ng trình l n, khi th c hành chúng ta vi t ch ự các khai báo hàm trong t p .h, còn các đ nh ệ nghĩa hàm đ trong t p .obj (lib).
ể
ệ
9
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
2. L nh return
ệ
c s d ng trong m t hàm. L nh ệ ệ ụ ử ộ
ươ
ọ
ự
ượ
L nh return đ ượ return th c hi n hai ch c năng: ệ ng trình g i nó. Làm cho m t hàm tr v ch ộ Đ c dùng đ tr v m t giá tr . ị ể ả ề Cú pháp dùng l nh return nh sau: ư ệ
ứ ở ề ộ
ả ị
return Giá_tr _tr _v ; ề return;
b t kỳ v trí nào trong ị ho c ặ ệ
L nh return có th dùng ở ấ cu i hàm. ố V i các hàm có tr v giá tr thì l nh return b t bu c
hàm nh ng th ư ườ
ể ng ở ả ề ộ ệ ắ ị
10
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
ớ ph i có. ả
3. Hàm không tr v giá tr ị
ả ề
ớ
ị
ể
ả
ả ề
V i các hàm không tr v giá tr thì khi khai ả ề báo và đ nh nghĩa hàm ta ph i khai báo ki u ị tr v là void. Ví d : ụ void chao();
N u s d ng l nh return trong hàm không tr ả
ử ụ ị
ệ ỉ
ượ
c d ng: ạ
ế v giá tr thì ch dùng đ ề return;
11
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
III. S d ng hàm ử ụ
ế
1. L i g i hàm ờ ọ 2. Truy n đ i s theo giá tr ị ố ố ề 3. Truy n đ i s theo tham chi u ố ố ề 4. Truy n con tr t i hàm ề 5. Truy n m ng t i hàm ả ề
ỏ ớ ớ
12
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
M t hàm, sau khi đ
1. L i g i hàm ờ ọ ượ ị ằ
ự
Cú pháp g i hàm nh sau: ọ
c đ nh nghĩa và khai báo, có ộ c th c hi n b ng m t l nh g i hàm (l i g i th đ ọ ờ ọ ộ ệ ệ ể ượ ng trình. Có th g i t đâu đó trong ch hàm) ể ọ ừ ươ ở hàm main, có th g i t m t hàm khác ho c có th ộ ể ặ ể ọ ừ g i t m t hàm thành viên c a l p. ủ ớ ọ ừ ộ
N u hàm đ
ư Tên_hàm(Danh sách các đ i s , n u có); ố ố
ế ượ
ọ ố ề ị
ị ả ị ọ ề
ố ố ố ố ố ể ằ ế ả
13
Bài gi ng Ngôn ng C - Ch
ng 8 GV. Ngô Công Th ng
ữ
ả
ươ
ắ
ế c khai báo và đ nh nghĩa là có các tham s thì khi g i hàm ta ph i truy n giá tr cho hàm qua các tham s . Các giá tr truy n cho hàm g i là các đ i s . Các đ i s có th là h ng, bi n, m ng, con tr ,…ỏ
1. L i g i hàm (ti p)
ờ ọ
ế
Ví d : gi s ta khai báo m t hàm c ng hai giá tr ị
ả ử ụ ộ ộ
ư
float float cong(float a, float b); Ta g i hàm này nh sau: ọ cong(7,8);
ộ ọ ờ ể ử ụ
ứ ị ộ ọ
ị
ứ ấ ứ ể ấ ẩ