Chương 8. Hàm trong C
I.Khaibáohàm II. Địnhngh ĩahàm III. Sử dụnghàm IV.Contr ỏ trỏ tớihàm V.Xây d ựngth ư việnhàm
1
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
I. Khai báo hàm
1.Gi ớithi ệu về hàm 2.Cúphápkhaibáohàm 3.Cáctham s ố trongkhaibáohàm
2
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
1. Giới thiệu về hàm † TrongC t ất cả cácch ươngtrìnhcon đều gọilàhàm. ư việncó s ẵn,ng ười lậptrìnhcó † Ngoàicáchàmth
† Khaibáohàm(functiondeclarationorprototype)là
thể tự tạoracáchàm. Để tạora m ộthàmng ười lập trìnhph ảikhaibáovà địnhngh ĩanó.
† Địnhngh ĩahàm(functiondefinition)làxác
xác địnhtên c ủahàm,ki ểu dữ liệutr ả về, số lượng tham số vàki ểu của từngtham s ố.
định ệnh
† CáchàmtrongCkhông l
côngvi ệcmàhàm s ẽ thựchi ệnthôngquacác l củahàm.
ồngnhau, t ứclàtrong m ột
3
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
hàmtakhôngth ểđị nhngh ĩa mộthàmkhác.
2. Cú pháp khai báo hàm
†Cúphápkhaibáohàm n
ằmtrên m ộtdòng, k ết
thúc bằng dấuch ấmph ẩy. Kiểu_trả_về Tên_hàm(Kiểu_1Tên_tham_s ố_1,Ki ểu_2Tên_tham_s ố_2,…); Ví dụ: floatinchtomet(floatx); intcong(inta,intb);
†Mộtkhaibáohàmkhôngchobi
ếtnh ữnggìcó
ỉ báochotrìnhbiên d
ịch
trongthânhàm.Nóch biết về tênhàm,ki ểu củahàm, s ố lượngcáctham số vàki ểu củacáctham s ố.
4
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
2. Cú pháp khai báo hàm (ti ếp)
† Khaibáohàmcóth
ểđặ t ở bất kỳ đâutr ướckhi g ọi
đuôi.h,còncác
định ư việncó đuôiobjho ặc
† Nếuhàm được địnhngh ĩa ở đâu đótr ướckhi g ọihàm ẫnnên
hàm. Tốtnh ấtlà đểởđầ u tệpch ứach ươngtrìnhchính (chứahàmmain)ho ặc để trước mộthàm s ẽ gọinó. Trongcácch ươngtrìnhnhi ềufilethìcáckhaibáohàm thường để trongcácfileheadercó nghĩahàm để trongcácfileth lib.
ấtlàtrongcácch ươngtrìnhcó
ươngtrình n ằmtrênnhi ều
5
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
thìcóth ể không cầnkhaibáohàm.Tuynhiên v cókhaibáohàmnh nhiềuhàm l ớnhaycácch file.
3. Các tham số trong khai báo hàm
†Nếuhàmkhôngcótham s
ố thìtrong d ấu ngoặc đơn củakhaibáohàm để trống.Ví d ụ: intxoa();
†Tên củacáctham s ố trongkhaibáohàmcó
thể không cầnxác định.Ví d ụ: floatinchtomet(float,float);
6
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
II. Định nghĩa hàm
1.Cúpháp địnhngh ĩahàm 2. Lệnhreturn 3.Hàmkhôngtr ả về giátr ị
7
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
1. Cú pháp định nghĩa hàm
Kiểu_trả_về Tên_hàm(Kiểu_1Tên_tham_s ố_1,Ki ểu_2Tên_tham_s ố_2,…) {
//Các lệnh củahàm để đây
Thân hàm
Không có dấu chấm phẩy
} Ví dụ: intcong(inta,intb) {
intz; z=a+b; returnz;
}
8
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
1. Cú pháp định nghĩa hàm (tiếp)
địnhngh ĩahàmgi ống ỉ kháclàkhôngcó d ấu ố bắtbu ộcph ảicó
†Dòng đầutiêntrong trongkhaibáohàm,ch chấmph ẩyvàcáctham s tên.
†Khi đãcókhaibáohàmthì
ệp.h,còncác
địnhngh ĩahàm ặc để trong một thường để sauhàmmainho tệpobj(lib). Để quen dần vớivi ệcvi ếtcác ết chươngtrình l ớn,khith ựchànhchúngtavi cáckhaibáohàmtrong t định nghĩahàm để trong tệp.obj(lib).
9
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
2. Lệnh return
† Lệnhreturn
được sử dụngtrong m ộthàm. L ệnh
returnth ựchi ệnhaich ức năng: n Làmcho m ộthàmtr ở về chươngtrình g ọinó. n Đượcdùng để trả về mộtgiátr ị. † Cúphápdùng l ệnhreturnnh ư sau:
† Lệnhreturncóth
hoặc returnGiá_tr ị_trả_về; return;
ể dùng ở bất kỳ vị trínàotrong
† Vớicáchàmcótr
hàmnh ưngth ường ở cuốihàm.
ả về giátr ị thì lệnhreturn b ắtbu ộc
10
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
phảicó.
3. Hàm không trả về giá trị
†Vớicáchàmkhôngtr
ả về giátr ị thìkhikhai
ảikhaibáoki
ểu
báovà địnhngh ĩahàmtaph trả về làvoid.Ví d ụ: voidchao();
†Nếu sử dụng lệnhreturntronghàmkhôngtr
ả
về giátr ị thìch ỉ dùng được dạng: return;
11
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
III. Sử dụng hàm
1. Lời gọihàm 2.Truy ền đối số theogiátr ị 3.Truy ềncontr ỏ tớihàm 4.Truy ền mảng tớihàm
12
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
1. Lời gọi hàm
† Mộthàm,saukhi
được địnhngh ĩavàkhaibáo,có
† Cúpháp g ọihàmnh ư sau:
thểđượ cth ựchi ện bằng một lệnh gọihàm(l ời gọi ể gọi từ hàm) ở đâu đótrongch ươngtrình.Cóth hàmmain,cóth ặccóth ể ể gọi từ mộthàmkhácho gọi từ mộthàmthànhviên c ủa lớp.
† Nếuhàm đượckhaibáovà
Tên_hàm(Danhsáchcác đối số, nếucó);
13
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng
địnhngh ĩalàcócác ị cho ảitruy ềngiátr tham số thìkhi g ọihàmtaph hàmquacáctham s ố.Cácgiátr ị truyềnchohàm g ọi làcác đối số.Các đối số cóth ể là hằng,bi ến, mảng, contr ỏ,…
1. Lời gọi hàm (tiếp)
† Ví dụ:gi ả sử takhaibáo m ộthàm c ộnghaigiátr
ị
† Lời gọi mộthàmcótr
float intcong(inta,intb); Ta gọihàmnàynh ư sau: cong(7,8);
ả về giátr ị cóth ể sử dụng ả
ểuth ức.Khi ấuch ấmph ẩy
14
Lập trình nâng cao -Ch ương 08 -Ngô Công Th ắng