Xem mẫu

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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