Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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;
short *myshort;
long *mylong;

và chú ng lầ n lư ợ t trỏ tớ i ô nhớ 1000 , 2000 and 3000 .

Nế u chú ng ta viế t

mychar++;
myshort++;
mylong++;

mychar - như bạ n mong đ ợ i - sẽ mang giá trị 1001. Tuy nhiê n myshort sẽ mang giá trị 2002mylong 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;
myshort = myshort + 1;
mylong = mylong + 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++;
*p++ = *q++;

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;
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;
char * b;
char ** c;
a = 'z';
b = & a;
c = & b;

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
*c là mộ t biế n có kiể u (char*) mang giá trị 7230
**c là mộ t biế n có kiể u (char) mang giá trị 'z'


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал