77
Chơng 5. Mng và xâu kí t
Các kiu d liu cơ bn nh ã gii thiu trong Chơng 2 không   biu
di+n các lo i d liu các bài toán òi h%i. Mt d khi chơng trình cn
lu x mt chui các phn t d liu cùng kiu, ch.ng h n nh danh sách
sinh viên trong trng hoc danh sách im thi ca mt sinh viên, có th s$p
xp, tìm kim, và tính toán các con s thng trên chui d liu ó. a s các
ngôn ng lp trình cung cp các kiu d liu cu trúc  phc v các nhim
v này, trong ó, mng là cu trúc d liu thông dng nht.
5.1. Mng mt chiu
Mng mt chiu là mt chui hu h n các phn t d liu thuc cùng mt kiu
d liu, t t i các ô nh liên tip trong b nh. Mi phn t trong mng có mt
ch# s khác nhau. Mng cho phép nh v truy nhp n t&ng phn t bng
cách s dng ch# s ca phn t ó.
d, im s cho 7 môn thi ca mt sinh viên th "c lu tr trong mt
mng có kích thc bng 7 (ngh'a 7 ô nh) thay vì khai báo 7 bin khác
nhau cho im thi t&ng môn. Mng  có th "c hình dung nh sau:

30 85 76 90 72 80 88
0 1 2 3 4 5 6
trong ó, mi ô biu di+n mt phn t ca mng trong trng h"p y mt
giá tr thuc kiu  – và "c ánh s ln l"t t& 0 n 6.
C)ng nh mt bin bình thng, mng phi "c khai báo trc khi s dng.
Cú pháp khai báo mt mng trong C++ có d ng:
kiu_d_liu tên_mng Us_phn_tV;
trong ó, kiu_d_liu mt kiu d liu h"p l (ch.ng h n , , ,
b…), tên_mng là mt nh danh h"p l, s_phn_t (luôn t trong cp
ngoc vuông) quy nh s l"ng phn t mà mng cn cha.
Ví d, mng  trong ví d trên "c khai báo nh sau:
78
UEV;
Lu ý: giá tr s phn t t trong cp ngoc vuông phi mt hng s, do các
mng khai báo kiu y thuc b nh t'nh phi kích thc "c xác nh
trc khi chơng trình th!c thi. Mng vi kích thc ng s "c nói n
trong chơng sau.
Kt qu ca lnh khai báo nh trên ta 7 bin kiu  vi "tên" ca chúng
U1V, U1V, U>V, U3V, U<V, U,V,
U6V.
Hình 5.1 minh ha vic khai báo s dng mng mt chiu. Lu ý s! khác
nhau v ng ngh'a ca giá tr bên trong cp ngoc vuông: t i lnh khai báo
mng tkích thc mng, còn khi truy nhp phn t ca mng thì
ch# s ca phn t mng.
5.1.1. Khi to mng
Khi khai báo mt mng, ta có th khi t o giá tr cho các phn t ca mng theo
cách sau:
UEV=61,E1,89,E,,88,3<,91 ;
Nu không "c khi t o, c phn t ca mng s giá tr không xác nh
cho n khi ta gán cho chúng mt giá tr nào ó.
5.1.2. Trách nhim kim soát tính h$p l ca ch% s mng
i vi mng "c khai báo vi kích thc n, ch# s ca các phn t trong
mng ó các s nguyên t& 0 n n–1. Ngoài ra, các giá tr khác u không
h"p l. Vic truy nhp mng bng các ch# s không h"p l, ch.ng h n khi truy
nhp n U-1V hay UV, th dn n các thay ,i không mong
mun i vi d liu vùng b nh bên ngoài mng (có th thuc v các bin
khác). Trong nhiu ngôn ng lp trình, vic y "c kim soát t! ng 
tránh trng h"p truy nhp vi ch# s không h"p l. Tuy nhiên, trong C++ vic
truy nhp n các phn t ca mng vi ch# s nh% hơn 0 hoc ln hơn n–1
không h ph m li pháp, vic truy nhp ra ngoài mng không gây li khi
dch nhng th gây li khi ch y, lp trình viên trách nhim kim soát các
giá tr ch# s mng  tránh trng h"p này.
79
<>
";
0UTB.A5)UA@.@=E;
()
U0UTB.A5)UA@.@V;
=1;
(=1;<0UTB.A5)UA@.@;++)

<<"."<<<<"$";
>>UV;
=+UV;

<<"D6""<<0UTB.A5)UA@.@;
1;

.1$31
.1$8,
.>$E6
.3$91
.<$E>
.,$81
.6$88
6789:;8<:=89>?@<89A>9BCDCEFGB
Hình 5.1: Ví d v khai báo và s dng mng.
5.1.3. Mng làm tham s cho hàm
th dùng mng làm tham s cho hàm. Hình 5.2 là kt qu ca vic sa
chơng trình trong Hình 5.1, a hai nhim v nhp d liu cho mng tính
im trung bình vào hai hàm và truyn mng  vào trong hai hàm ó.
 ý rng tuy các tham s mng không "c khai báo vi t! "&" trong phn
khai báo nh ngh'a hàm, nhng th!c cht chúng các tham chiu (thay
giá tr). Nói cách khác, khi chơng trình th!c thi, các m không t o các bn
sao riêng ca các mng "c truyn làm tham s (vic t o bn sao này có th
chi phí rt cao v b nh.)
80
Vy m th nào khi ta cn quy nh rng mt hàm không "c sa ,i mt
tham s mng nào ó? (ví d không nên cho hàm 6" quyn sa mng
.) Gii pháp C++ cung cp t& khóa . Ta sa phn khai báo
tham s ca hàm 6" t&
6"(UV,z);
thành
6"(UV,z);
Kt qu là trình biên dch s không chp nhn các dòng lnh sa giá tr ca
tham s mng  bên trong hàm 6". Nên s dng t& khóa 
cho tt c các tham s mà hàm không có nhu cu thay ,i.
81
<>
";
0UTB.A5)UA@.@=E;
6@(UV,z)
(=1;<z;++)

<<"."<<<<"$";
>>UV;

6"(UV,z)
=1;
(=1;<z;++)
=+UV;
z;
()
U0UTB.A5)UA@.@V;
@(,0UTB.A5)UA@.@);
6"@=6"(,0UTB.A5)UA@.@);
<<"D6""<<6"@;
1;
Hình 5.2: Ví d v mng làm tham s ca hàm.
5.2. Mng nhiu chiu
Cu trúc mng th nhiu hơn mt chiu. d,  lu mt bàn c ca-rô,
ta th dùng mt mng hai chiu cha các kí t!, t! '.' biu di+n mt ô trng
trên bàn c, các t! 'x' 'o' ln l"t biu di+n các hiu trong tchơi c ca
rô. Khai báo mng hai chiu nh sau: