Nối tiếp nội dung chương 5 của Bài giảng Ngôn ngữ lập trình C chương 6 sẽ tiếp tục giới thiệu đến bạn đọc về hàm và cấu trúc chương trình, quy tắc xây dựng một hàm, các khái niệm liên quan đến hàm, cách xây dựng hàm, con trỏ và địa chỉ. Hy vọng, đây là tài liệu tham khảo hữu ích dành cho các bạn.
Trang 2Các dòng ti p theo dùng ế đ khai báo ki u giá ể ể
tr c a ị ủ đ i s Và b t bu c ph i khai báo ki u ố ố ắ ộ ả ể giá tr cho t t c các ị ấ ả đ i s ố ố
Cú pháp chung c a l nh return ủ ệ
return ([Bi u th c]); ể ứ
Giá tr c a bi u th c trong ngo c s ị ủ ể ứ ặ ẽ đư c ợ gán cho hàm.
Trang 32 Quy t c ho t ắ ạ đ ng c a hàmộ ủ
Cách g i hàm:ọ
tên_hàm([Danh sách tham s th c]);ố ựChú ý:
S tham s th c ph i b ng v i s tham ố ố ự ả ằ ớ ố
s hình th c (ố ứ đ i) và m i tham s th c ph i ố ỗ ố ự ả
có cùng ki u v i giá tr nhể ớ ị ư ki u giá tr c a ể ị ủ
đ i tố ương ng c a nó.ứ ủ
V nguyên t c m i hàm c n ề ắ ọ ầ đư c khái ợbáo trư c khi s d ng nó. Nó hoàn toàn ớ ử ụ
gi ng v i vi c khai báo m t bi n.ố ớ ệ ộ ế
Trang 4Ví d :ụ
Vi t chế ương trình tìm s l n nh t và nh nh t ố ớ ấ ỏ ấ
c a t ng c t trong ma tr n, có s d ng hàm tìm ủ ừ ộ ậ ử ụmax, tìm min
Trang 5clrscr();
Trang 6}
Trang 7return 0;
}
Trang 9 Khi xây d ng hàm c n n m v ng nh ng qui ự ầ ắ ữ ữ đ nh ị
v m i quan h gi a: tham s th c và tham s hình ề ố ệ ữ ố ự ố
th c ( ứ đ i) cũng nh ố ư các đ i trong thân c a hàm ố ủ
Trang 10 Đ i v i hàm không cho giá tr thì chúng ta ố ớ ị không c n khai báo ki u giá tr c a nó ầ ể ị ủ
Đ i v i các hàm có giá tr mà ta quên ố ớ ị
đ i v i hàm có gái tr ki u nguyên thì ố ớ ị ể
Khi g p l nh return có ch a bi u th c, thì ặ ệ ứ ể ứ giá tr c a bi u th c bao gi cũng ị ủ ể ứ ờ đư c ợ chuy n v theo ki u giá tr c a hàm tr ể ề ể ị ủ ư c ớ
Trang 11 Nguyên t c ho t ắ ạ đ ng c a tham s th c, các ộ ủ ố ự đ i và các ố
bi n c c b ế ụ ộ
Do đ i và bi n c c b ố ế ụ ộ đ u có ph m vi ho t ề ạ ạ đ ng trong ộ cùng m t hàm nên ộ đ i và bi n c c b c n có tên khác ố ế ụ ộ ầ nhau.
Đ i và bi n c c b ố ế ụ ộ đ u là bi n t ề ế ự đ ng. Chúng ộ đư c ợ cung c p b nh khi hàm ấ ộ ớ đư c kh i ợ ở đ ng và chúng s ộ ẽ
l p t c bi n m t khi máy ra kh i hàm. Nh ậ ứ ế ấ ỏ ư v y, không ậ
th mang giá tr c a ể ị ủ đ i ra kh i hàm. Đi u này có nghĩa ố ỏ ề
là không th s d ng ể ử ụ đ i ố đ làm thay ể đ i giá tr c a ổ ị ủ
b t k m t ấ ỳ ộ đ i l ạ ư ng nào ngoài hàm ợ ở
Khi m t hàm ộ đư c g i t i, vi c ợ ọ ớ ệ đ u tiên là gái tr c a ầ ị ủ các tham s th c ố ự đư c gán cho các ợ đ i. Nh ố ư v y, các ậ
đ i chính là b n sao c a các tham s th c. Hàm ch làm ố ả ủ ố ự ỉ
vc c trên các ệ đ i, t c là ch làm vi c trên các b n sao ố ứ ỉ ệ ả này. Các đ i có t b bi n ố ể ị ế đ i nh ổ ưng các tham s th c ố ự (các b n chính) không h b thay ả ề ị đ i ổ
Trang 12II Con tr và ỏ đ a chị ỉ
Trang 13Chúng ta cũng có th hi u: Đ a ch c a bi n là ể ể ị ỉ ủ ế
s th t c a byte ố ứ ự ủ đ u tiên trong m t dãy các byte ầ ộliên ti p nhau mà máy dành cho bi n.ế ế
C n chú ý r ng: Đ a ch c a bi n là m s ầ ằ ị ỉ ủ ế ộ ốnguyên nhưng không đư c ợ đánh đ ng nó v i các ồ ớ
s nguyên thông thố ư ng trong các phép tínhờ
Phép toán
&x cho ta đ a ch c a bi n xị ỉ ủ ế
Trang 142 Con tr ỏ
Con tr là m t bi n dùng ỏ ộ ế đ ch a ể ứ đ a ch Vì có ị ỉnhi u lo i ề ạ đ a ch nên cũng có b y nhiêu ki u ị ỉ ấ ểcon tr tỏ ương ng.ứ
Ví d :ụ
Con tr ki u int dùng ỏ ể đ ch a ể ứ đ a ch các ị ỉ
bi n ki u int.ế ểCũng như bi n thì con tr cũng c n ph i ế ỏ ầ ả đ oc ựkhai báo trư c khi s d ng.ớ ử ụ
Cú pháp khai báo:
type *tên_con_trỏ
Ví d :ụ
int x,y,*px,*py
Trang 15Toán t : & và * là các toán t m t ngôi, nó ch tác ử ử ộ ỉ đ ng ộ lên bi n, ph n t c a m ng ho c chu i ế ầ ử ủ ả ặ ỗ
&: Toán t l y ử ấ đ i ch c a bi n ạ ỉ ủ ế
*: Toán t l y giá tr t i ử ấ ị ạ đ a ch nào ị ỉ đó.
Các toán t này có ử đ ộ ưu tiên hơn các toán t s h c và ử ố ọ
có đ ộ ưu tiên tương đương v i toán t m t ngôi ớ ử ộ
3 Các bi u th c con tr : ể ứ ỏ
p2=p1;
Trang 16p= p+3: Nh y ả đ n ế đ a ch cách p là 3*Sizeof(p) ị ỉ Trong bi u th c ta có th dùng các d ng sau c a m t bi n ể ứ ể ạ ủ ộ ế con tr p: ỏ
(*p)++,++(*p):Tăng giá tr t i p lên 1 ị ạ
*(p++): l y gía tr ph n t k ti p tr b i p, ấ ị ầ ử ế ế ỏ ở
Trang 17M i thành ph n c a cùng m t khai báo (bi n, ọ ầ ủ ộ ế
ph n t m ng, hàm, con tr ) khi xu t hi n trong ầ ử ả ỏ ấ ệ
bi u th c ể ứ đ u có cùng m t ki u giá tr ề ộ ể ị
Ví d :ụ
int a, b[5], f(), *p;
Thì a, b[i], f(x) ho *p xu t hi n trong m t ặ ấ ệ ộ
bi u ể th c thì chúng luôn luôn cho m t gia tr ứ ộ ị
ki u ể float
Trang 185. Hàm có đ i con tr :ố ỏ
N u ế đ i là con tr thì tham s th c tố ỏ ố ự ương ng ứ
ph i là ả đ a ch c a bi n ho c ị ỉ ủ ế ặ đ a ch c a ph n t ị ỉ ủ ầ ử
m ng có ki u tả ể ương ng.ứ
Khi đó đ a ch c a bi n ị ỉ ủ ế đư c truy n cho ợ ề đ i con ố
tr tỏ ương ng.ứ
Ví d :ụ
Trang 19#include "stdio.h"int swap(x,y)
Trang 20return 0;
}
Trang 21#include "stdio.h"swap(x,y)
Trang 22printf("\nx = %d y = %d",x,y); getch();
return 0;
}
Trang 23Vi t chế ương trình gi i phuả ơng trình b c hai có ậ
s ử d ng con tr ụ ỏ đ xây d ng hàm gi i ể ự ảphương trình
Trang 24}
Trang 25printf("\nKhong phai la phuong trinh bac 2 vi a=0");
Trang 26getch();
return 0;
}
Trang 27m ng a, ả đi u này có nghĩa p = &a[0]ề
Khi đó các bi u th c sau là tể ứ ương đương nhau:
*p a[0]
*(p+i) a[i]
p+i &a[i]
p=p+1 *pa=a[4]
Trang 28Vi c khai báo m ng là ệ ả đ a ch c a m ng ị ỉ ủ ả đư c c p ợ ấ
rõ ràng và đ kích thủ ư c, ớ đ a ch này không thay ị ỉ
đ i. Tên m ng ổ ả đư c xem nhợ ư m t h ng ộ ằ đ a chị ỉ
Vi c khai báo con tr thì v trí ệ ỏ ị đư c c p là ch ợ ấ ổ
c a con tr , còn v trí con tr tr ủ ỏ ở ị ỏ ỏ đ n là tu ý, và ế ỳ
nó ch trao ỉ đ i ổ đ a ch , giá tr khi nó ị ỉ ị đã có đ a ch ị ỉ
Ví d : Vi t chụ ế ương trình nh p vào m ng m t ậ ả ộchi u dề ư i d ng con tr ớ ạ ỏ
Trang 29}
Trang 30}
Trang 31IV Con tr và m ng nhi u chi uỏ ả ề ề
Vi c x lý m ng nhi u chi u ph c t p hệ ử ả ề ề ứ ạ ơn so
v i m ng m t chi u. Vì không ph i m i quy ớ ả ộ ề ả ọ
t c c a m ng m t chi u có th áp d ng ắ ủ ả ộ ề ể ụ đư c ợ
v i m ng nhi u chi u. B i nh ng lý do sau:ớ ả ề ề ở ữ
Phép toán l y ấ đ a ch không dùng ị ỉ đư c ợ
đ i v i các ph n t c a m ng nhi u ố ớ ầ ử ủ ả ềchi u.ề
M ng nhi u chi u thì các ph n t ả ề ề ầ ử đư c ợ
b trí liên ti p nhau trong b nh h t ố ế ộ ớ ếhàng này đ n hàng khác. Nhế ưng không
th s dung phép toán a+i ể ử đ nh p s ể ậ ố
li u cho ph n t c a m ng nhi u chi u.ệ ầ ử ủ ả ề ề
Trang 32Tuy nhiêu chúng ta có th dùng con tr ể ỏ đ truy ể
c p ậ đ n t ng ph n t c a m ng nhi u chi u, v i ế ừ ầ ử ủ ả ề ề ớ
s ố đ a ch b ng v i s ph n t trong m ng nhi u ị ỉ ằ ớ ố ầ ử ả ềchi u.ề
Ví d : ụ
Vi t chế ương trình nh p vào m t ma trân 3 dòng ậ ộ
3 c t và xác ộ đ nh ph n ph n t l n nh t trong ma ị ầ ầ ử ớ ấtrân ch s d ng con tr , không dùng m ng.ỉ ử ụ ỏ ả
Trang 34}