Xem mẫu
- Updatesofts.com Ebooks Team
R t nhi u l p trình viên kinh nghi m khuyên r ng t t c các hàm nên ñư c khai báo m u.
ðó cũng là l i khuyên c a tôi, nh t là trong trư ng h p có nhi u hàm ho c chúng r t dài,
khi ñó vi c khai báo t t c các hàm cùng m t ch cho phép chúng ta bi t ph i g i các
hàm như th nào, vì v y ti t ki m ñư c th i gian.
Trang 40
- Updatesofts.com Ebooks Team
M ng
M ng là m t dãy các ph n t có cùng ki u ñư c ñ t liên ti p trong b nh và có th truy
xu t ñ n t ng ph n t b ng cách thêm m t ch s vào sau tên c a m ng.
ði u này có nghĩa là, ví d , chúng ta có th lưu 5 giá tr ki u int mà không c n ph i khai
báo 5 bi n khác nhau.Ví d , m t m ng ch a 5 giá tr nguyên ki u int có tên là billy có
th ñư c bi u di n như sau:
trong ñó m i m t ô tr ng bi u di n m t ph n t c a m ng, trong trư ng h p này là các
giá tr nguyên ki u int. Chúng ñư c ñánh s t 0 ñ n 4 vì ph n t ñ u tiên c a m ng
luôn là 0 b t k ñ dài c a nó là bao nhiêu.
Như b t kì bi n nào khác, m t m ng ph i ñư c khai báo trư c khi có th s d ng. M t
khai báo ñi n hình cho m t m ng trong C++ như sau:
type name [elements];
trong ñó type là m t ki u d li u h p l (int, float...), name là m t tên bi n h p l và
trư ng elements ch ñ nh m ng ñó s ch a bao nhiêu ph n t
Vì v y, ñ khai báo billy như ñã trình bày trên chúng ta ch c n m t dòng ñơn gi n như
sau:
int billy [5];
Chú ý: Trư ng elements bên trong c p ngo c [] ph i là m t giá tr h ng khi khai báo
m t m ng, vì m ng là m t kh i nh tĩnh có kích c xác ñ nh và trình biên d ch ph i có
kh năng xác ñ nh xem c n bao nhiêu b nh ñ c p phát cho m ng trư c khi các l nh có
th ñư c th c hi n.
Kh i t o m t m ng.
Khi khai báo m t m ng v i t m ho t ñ ng ñ a phương (trong m t hàm), theo m c ñ nh nó
s không ñư c kh i t o, vì v y n i dung c a nó là không xác ñ nh cho ñ n khi chúng ra
lưu các giá tr lên ñó.
N u chúng ta khai báo m t m ng toàn c c (bên ngoài t t c các hàm) nó s ñư c kh i t o
và t t c các ph n t ñư c ñ t b ng 0. Vì v y n u chúng ta khai báo m ng toàn c c:
Trang 41
- Updatesofts.com Ebooks Team
int billy [5];
m i ph n t c a billy s ñư c kh i t o là 0:
Nhưng thêm vào ñó, khi chúng ta khai báo m t m ng, chúng ta có th gán các giá tr kh i
t o cho t ng ph n t c a nó. Ví d :
int billy [5] = { 16, 2, 77, 40, 12071 };
l nh trên s khai báo m t m ng như sau:
S ph n t trong m ng mà chúng ta kh i t o v i c p ngo c nh n { } ph i b ng s ph n
t c a m ng ñã ñư c khai báo v i c p ngo c vuông [ ]. B i vì ñi u này có th ñư c coi
là m t s l p l i không c n thi t nên C++ cho phép ñ tr ng gi a c p ngo c vuông, kích
thư c c a m ng ñư c xác ñ nh b ng s giá tr gi a c p ngo c nh n.
Truy xu t ñ n các ph n t c a m ng.
b t kì ñi m nào c a chương trình trong t m ho t ñ ng c a m ng, chúng ta có th truy
xu t t ng ph n t c a m ng ñ ñ c hay ch nh s a như là ñ i v i m t bi n bình thư ng.
C u trúc c a nó như sau:
name[index]
Như trong ví d trư c ta có m ng billy g m 5 ph n t có ki u int, chúng ta có th truy
xu t ñ n t ng ph n t c a m ng như sau:
Ví d , ñ lưu giá tr 75 vào ph n t th ba c a billy ta vi t như sau:
Trang 42
- Updatesofts.com Ebooks Team
billy[2] = 75;
và, ví d , ñ gán giá tr c a ph n t th 3 c a billy cho bi n a, chúng ta vi t:
a = billy[2];
Vì v y, xét v m i phương di n, bi u th c billy[2] gi ng như b t kì m t bi n ki u int.
Chú ý r ng ph n t th ba c a billy là billy[2], vì m ng b t ñ u t ch s 0. Vì v y,
ph n t cu i cùng s là billy[4]. Vì v y n u chúng ta vi t billy[5], chúng ta s truy
xu t ñ n ph n t th 6 c a m ng và vư t quá gi i h n c a m ng.
Trong C++, vi c vư t quá gi i h n ch s c a m ng là hoàn toàn h p l , tuy nhiên nó có
th gây ra nh ng v n ñ th c s khó phát hi n b i vì chúng không t o ra nh ng l i trong
quá trình d ch nhưng chúng có th t o ra nh ng k t qu không mong mu n trong quá
trình th c hi n. Nguyên nhân c a vi c này s ñư c nói ñ n kĩ hơn khi chúng ta b t ñ u s
d ng con tr .
C n ph i nh n m nh r ng chúng ta s d ng c p ngo c vuông cho hai tác v : ñ u tiên là
ñ t kích thư c cho m ng khi khai báo chúng và th hai, ñ ch ñ nh ch s cho m t ph n
t c th c a m ng khi xem xét ñ n nó.
int billy[5]; // khai báo m t m ng m i.
billy[2] = 75; // truy xu t ñ n m t ph n t ca
m ng.
M t vài thao tác h p l khác v i m ng:
billy[0] = a;
billy[a] = 75;
b = billy [a+2];
billy[billy[a]] = billy[2] + 5;
12206
// ví d v m ng
#include
int billy [] = {16, 2, 77, 40,
12071};
int n, result=0;
int main ()
{
for ( n=0 ; n
- Updatesofts.com Ebooks Team
M ng nhi u chi u.
M ng nhi u chi u có th ñư c coi như m ng c a m ng, ví d , m t m ng hai chi u có th
ñư c tư ng tư c như là m t b ng hai chi u g m các ph n t có ki u d li u c th và
gi ng nhau.
bi u di n m t m ng hai chi u kích thư c 3x5 có ki u int. Cách khai báo m ng
jimmy
này như sau:
int jimmy [3][5];
và, ví d , cách ñ truy xu t ñ n ph n t th hai theo chi u d c và th tư theo chi u ngang
trong m t bi u th c như sau:
jimmy[1][3]
(hãy nh r ng ch s c a m ng luôn b t ñ u t 0).
M ng nhi u chi u không b gi i h n b i hai ch s (hai chi u), Chúng có th ch a bao
nhi u ch s tùy thích m c dù ít khí c n ph i dùng ñ n m ng l n hơn 3 chi u. Hãy th
xem xét lư ng b nh mà m t m ng có nhi u ch s c n ñ n. Ví d :
char century [100][365][24][60][60];
gán m t giá tr char cho m i giây trong m t th k , ph i c n ñ n hơn 3 t giá tr chars!
Chúng ta s ph i c n kho ng 3GB RAM ñ khai báo nó.
M ng nhi u chi u th c ra là m t khái ni m tr u tư ng vì chúng ta có th có k t qu
tương t v i m ng m t chi u b ng m t thao tác ñơn gi n gi a các ch s c a nó:
int jimmy [3][5]; tương ñương v i
int jimmy [15]; (3 * 5 = 15)
Trang 44
- Updatesofts.com Ebooks Team
Dư i ñây là hai ví d v i cùng m t k t qu như nhau, m t s d ng m ng hai chi u và
m t s d ng m ng m t chi u:
// multidimensional array // pseudo-multidimensional array
#include #include
#define WIDTH 5 #define WIDTH 5
#define HEIGHT 3 #define HEIGHT 3
int jimmy [HEIGHT][WIDTH]; int jimmy [HEIGHT * WIDTH];
int n,m; int n,m;
int main () int main ()
{ {
for (n=0;n
- Updatesofts.com Ebooks Team
c a nó, vi c này cũng t o ra k t qu th c t gi ng thao tác trên nhưng l i nhanh hơn
nhi u và hi u qu hơn.
ð có th nh n m ng là tham s thì ñi u duy nh t chúng ta ph i làm khi khai báo hàm là
ch ñ nh trong ph n tham s ki u d li u cơ b n c a m ng, tên m ng và c p ngo c vuông
tr ng. Ví d , hàm sau:
void procedure (int arg[])
nh n vào m t tham s có ki u "m ng c a char" và có tên arg. ð truy n tham s cho
hàm này m t m ng ñư c khai báo:
int myarray [40];
ch c n g i hàm như sau:
procedure (myarray);
Dư i ñây là m t ví d c th
5 10 15
// arrays as parameters
2 4 6 8 10
#include
void printarray (int arg[], int
length) {
for (int n=0; n
- Updatesofts.com Ebooks Team
ví d , m t hàm v i tham s là m ng nhi u chi u có th như sau:
void procedure (int myarray[][3][4])
chú ý r ng c p ngo c vuông ñ u tiên ñ tr ng nhưng các c p ngo c sau thì không. B n
luôn luôn ph i làm v y vì trình biên d ch C++ ph i có kh năng xác ñ nh ñ l n c a các
chi u thêm vào c a m ng.
M ng, c m t chi u và nhi u chi u, khi truy n cho hàm như là m t tham s thư ng là
nguyên nhân gây l i cho nh ng l p trình viên thi u kinh nghi m. Các b n nên ñ c bài
3.3. Con tr ñ có th hi u rõ hơn m ng ho t ñ ng như th nào.
Trang 47
nguon tai.lieu . vn