node28






5.3 Arytmetyka wskaźników



























Dalej: 5.4 Tablice znaków (C-napisy)
W górę: 5. Tablice statyczne i wskaźniki
Wstecz: 5.2 Typ tablicowy






5.3 Arytmetyka wskaźników



Do wskaźników
można dodawać (i odejmować) liczby całkowite.
Typ wskaźnikowy nie jest jednak typem całkowitym,
takie dodawanie jest zdefiniowane w specjalny sposób.


Załóżmy, że
p jest wskaźnikiem typu
Typ*, a zmienna

shift jest zmienną typu całkowitego (ale nie
long).







Wartością wyrażenia
p+shift jest wtedy
adres zawarty w zmiennej
p powiększony o 
shift
wielokrotności wymiaru zmiennej typu
Typ
(czyli
sizeof(Typ)).





Jeśli zatem
shift wynosi 2, a 
sizeof(Typ)
wynosi 4 (jak dla
int), wartością
p+shift jest adres
zawarty w 
p zwiększony o 8 (= 2 . 4).
Jeśli
sizeof(Typ) wynosiłby 8, jak dla typu

double, to wartością
p+shift byłby adres
zawarty w 
p powiększony o 8.
Właśnie, między innymi, ze względu na arytmetykę wskaźników
deklarując zmienną wskaźnikową trzeba określić,
na jakiego typu zmienne będzie ona wskazywać.
Z tego też powodu nie można stosować arytmetyki wskaźników do
wskaźników generycznych
(typu
void*)
- brak
określonego typu powoduje, że nie wiadomo by było o ile
należy zwiększyć taki adres.


Spójrzmy na następujący przykład:



Wyszukiwarka

Podobne podstrony:
node288 2I5D2N5RZRB6CGYEMZRHQCC7ATOUO3IRSOX574Q
node282 WOVP4BK63MCGNM5GTHT3EEHALDUBFYJD4USEYBI
node284 32VLTUD5CYE3KTEH2TFABQIRF27HE4C27KLHZ6Y
node28 PKGCYJXJI5EANQDANU752M6HF646JXMM7AS4XHA
node281 DCENVS4LIUWKF7REGZCZXAOFCLUIXMLV3S3XDRY
node28
node283 TV2JNOLYIKW3V6KKIYBUMQKCHOSEJY25YB2QWPQ
node287 TIIPRQU5MEOY6QZ7C2ZOE5NXBHNUZONKBFFTVGA
node28 OXUPJNFXUT2I2PDQ2EVXKR3RSP5N5AFSB2JWRZI
node285 S723HOGRZ7UQCUBD44SASX6UAC57PN54RZO3UGA
node289 WA5XXFEHCW2F2LFAY5I73B6RP32YV6PBKXZV6VY
node28 E3CM7LVUGI36LS5WVKDV6B6SIKELNE34235K4GQ
node280 IPZIWUD7GZ2FGPDFXDGFKSPQ6WZ7WJSX5GK4ZGQ
node28
node286 WMY2LOWEUT5INMKWDK6UUXHFFD2AGJMN2ZXTQ6Y
node28
node28

więcej podobnych podstron