Aritmetica indicatorilor

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

1leftarrow blue.svg Element principal: Pointer (programare) .

În limbajele de programare , expresia aritmetică a indicatorilor se referă la un set de operații aritmetice aplicabile valorilor de tip pointer . Aceste operațiuni au scopul de a permite un nivel ridicat de flexibilitate în accesarea colecțiilor de date omogene stocate în locații de memorie adiacente (de exemplu, matrice ). Aritmetica indicatorilor este tipică limbajului C și a fost menținută în unele limbaje derivate (este prezentă de exemplu în C ++, dar nu în Java ).

Aritmetica indicatorilor în limbajul C.

Aritmetica indicatorilor C se bazează pe trei operatori fundamentali, însoțiți de un număr de alți operatori a căror semantică este derivată de cea a operatorilor principali:

  • + : operator binar pentru suma unui pointer și a unui număr întreg
    • derivat: ++ : unară auto - incrementare operator al unui indicator
    • derivată: += : operator de atribuire cu sumă
  • - : operator diferență binară între doi indicatori
  • - : operator binar pentru scăderea unui număr întreg dintr-un pointer
    • derivată: -- : operator unar autodecrementant al unui pointer
    • derivată: -= : operator de atribuire cu diferență

Operator sumă a unui pointer și a unui număr întreg

Definiție

Suma operatorului pointer și întreg necesită un operand de tip pointer și un operand de tip întreg . Rezultatul sumei este adresa dată de indicatorul incrementat cu rezultatul înmulțirii întregului specificat cu sizeof tipului de bază al indicatorului exprimat în octeți . De exemplu, dacă p este un pointer către tipul întreg int ( int *p ) cu valoarea 1000 ( p=1000 ) și dacă dimensiunea unui int este de doi octeți, p+1 este 1002, p+2 este 1004, și în general p+n este 1000 + n * 2.

Sens

Operația de adăugare între indicator și întreg este semnificativă în cazul în care indicatorul conține adresa unei celule dintr-o matrice de date de tipul de bază al indicatorului. De fapt, dacă p (pointer to integer) conține adresa primei celule dintr-o matrice de numere întregi, p+1 produce adresa celei de-a doua celule, p+2 adresa celei de-a treia și așa mai departe. Aritmetica indicatorului introduce, prin urmare, o sintaxă alternativă la cea tradițională (bazată pe indexare) pentru accesarea elementelor unui tablou.

Operator de diferență între doi indicatori

Definiție

Operatorul diferenței pointer necesită doi operanzi ambii de tip pointer, având un tip de bază omogen (de exemplu, doi indicatori întregi, doi indicatori de caractere și așa mai departe). Rezultatul diferenței este diferența aritmetică dintre cele două adrese specificate de indicatori, împărțită la dimensiunea tipului de bază. De exemplu, dacă p conține 1002 și q conține 1000 și ambele sunt indicatori către int , iar dimensiunea int este 2, atunci qp este 1.

Sens

Funcționarea diferenței dintre indicatori este semnificativă dacă cei doi operanzi conțin adresele a două celule diferite ale aceluiași tablou și dacă tipul de bază al matricei coincide cu cel al celor doi indicatori. În acest caz, de fapt, diferența dintre cele două indicatoare corespunde numărului de celule din matrice care separă celula indicată de indicatorul de valoare mai mică de cel al indicatorului de valoare mai mare.

Operator de scădere a unui întreg dintr-un pointer

Definiție

Operația de scădere a unui întreg dintr-un pointer are un operand stâng de tip pointer și un operand drept de tip întreg. Rezultatul (similar cu cazul sumei) este valoarea indicatorului scăzută cu rezultatul înmulțirii întregului cu mărimea tipului de bază al indicatorului. De exemplu, dacă p este un pointer către int cu o valoare de 1000, iar dimensiunea unui int este 2, p-1 este 998.

Sens

În aceleași condiții descrise mai sus pentru adunare, operația de scădere a unui număr întreg dintr-un pointer permite obținerea adresei unei celule dintr-o matrice care o precedă pe cea indicată de pointerul pe care se aplică scăderea.

Operator autoincrementat și autodecrementat al unui pointer

În limbajul C, operațiile de autoincrementare și autodecrementare ale unui pointer , cum ar fi cele ale numărurilor întregi de autoincrementare și auto-decrementare, reprezintă o formă particulară de adunare și scădere. Acestea sunt definite de următorul efect:

  • x++ crește x cu 1 și produce valoarea lui x înainte de increment
  • ++x crește x cu 1 și produce valoarea x după increment
  • x-- decrements x cu 1 și produce valoarea x înaintea decrementare
  • --x scade x cu 1 și produce valoarea lui x după scădere

Menținând ferm aceste definiții, semnificația acestor operatori în cazul în care operandul lor este un pointer se obține din definiția adunării pointerului și întregului și a scăderii unui întreg dintr-un pointer.

Alți operatori

Regulile descrise mai sus se aplică, de asemenea, în C altor doi operatori, definiți în termenii operatorilor + și - :

p+=n corespunde p=p+n
p-=n corespunde p=pn

Notă privind supraîncărcarea

Toți operatorii descriși mai sus au, în C și în limbi derivate, o semnificație chiar dacă operanzii sunt date numerice care nu sunt de tip pointer. Faptul că același simbol capătă semnificații (ușor) diferite în funcție de tipul operanzilor săi poate fi considerat un caz de supraîncărcare a operatorului .

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT