Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Các phép tính số học với pointer
Việ c thự c hiệ n cá c phé p tí nh số họ c vớ i con trỏ hơ i khá c so vớ i cá c kiể u dữ liệ u số nguyê n khá c. Trư ớ c hế t, chỉ phé p cộ ng và trừ là đ ư ợ c phé p dù ng. Như ng cả cộ ng và trừ đ ề u cho kế t quả phụ thuộ c và o kí ch thư ớ c củ a kiể u dữ liệ u mà biế n con trỏ trỏ tớ i. Chú ng ta thấ y có nhiề u kiể u dữ liệ u khá c nhau tồ n tạ i và chú ng có thể chiế m chỗ nhiề u hơ n hoặ c í t hơ n cá c kiể u dữ liệ u khá c. Ví dụ, trong cá c kiể u số nguyê n, char chiế m 1 byte, short chiế m 2 byte và long chiế m 4 byte. Giả sử chú ng ta có 3 con trỏ sau: char *mychar; và chú ng lầ n lư ợ t trỏ tớ i ô nhớ 1000 , 2000 and 3000 . Nế u chú ng ta viế t mychar++; mychar - như bạ n mong đ ợ i - sẽ mang giá trị 1001. Tuy nhiê n myshort sẽ mang giá trị 2002 và mylong mang giá trị 3004. Nguyê n nhâ n là khi cộ ng thê m 1 và o mộ t con trỏ thì nó sẽ trỏ tớ i phầ n tử tiế p theo có cù ng kiể u mà nó đ ã đ ư ợ c đ ị nh nghĩ a, vì vậ y kí ch thư ớ c tí nh bằ ng byte củ a kiể u dữ liệ u nó trỏ tớ i sẽ đ ư ợ c cộ ng thê m và o biế n con trỏ.
Đ iề u nà y đ ú ng vớ i cả hai phé p toá n cộ ng và trừ đ ố i vớ i con trỏ. Chú ng ta cũ ng hoà n toà n thu đ ư ợ c kế t quả như trê n nế u viế t: mychar = mychar + 1; Cầ n phả i cả nh bá o bạ n rằ ng cả hai toá n tử tă ng (++) và giả m (--) đ ề u có quyề n ư u tiê n lớ n hơ n toá n tử tham chiế u (*), vì vậ y biể u thứ c sau đ â y có thể dẫ n tớ i kế t quả sai: *p++; Lệ nh đ ầ u tiê n tư ơ ng đ ư ơ ng vớ i *(p++) đ iề u mà nó thự c hiệ n là tă ng p (đ ị a chỉ ô nhớ mà nó trỏ tớ i chứ khô ng phả i là giá trị trỏ tớ i). Lệ nh thứ hai, cả hai toá n tử tă ng (++) đ ề u đ ư ợ c thự c hiệ n sau khi giá trị củ a *q đ ư ợ c gá n cho *p và sau đ ó cả q và p đ ề u tă ng lê n 1. Lệ nh nà y tư ơ ng đ ư ơ ng vớ i: *p = *q; Như đ ã nó i trong cá c bà i trư ớ c, tô i khuyê n cá c bạ n nê n dù ng cá c cặ p ngoặ c đ ơ n đ ể trá nh nhữ ng kế t quả khô ng mong muố n. Con trỏ trỏ tớ i con trỏ C++ cho phé p sử dụ ng cá c con trỏ trỏ tớ i cá c con trỏ khá c giố ng như là trỏ tớ i dữ liệ u. Đ ể là m việ c đ ó chú ng ta chỉ cầ n thê m mộ t dấ u sao (*) cho mỗ i mứ c tham chiế u. char a; giả sử rằ ng a, b, c đ ư ợ c lư u ở cá c ô nhớ 7230 , 8092 and 10502 , ta có thể mô tả đ oạ n mã trê n như sau: Đ iể m mớ i trong ví dụ nà y là biế n c , chú ng ta có thể nó i về nó theo 3 cá ch khá c nhau, mỗ i cá ch sẽ tư ơ ng ứ ng vớ i mộ t giá trị khá c nhau: c là mộ t biế n có kiể u (char **) mang giá trị 8092
|