next up previous contents
Next: Pointeri la functii Up: Pointeri Previous: Pointeri ca argumente ale   Cuprins


Pointeri si tablouri

În C, exista o strânsa legatura între pointeri si tablouri. Când se foloseste numele unui tablou (fara index), se genereaza un pointer catre primul element al tabloului. Astfel, în C se pot transmite tablouri ca parametri în functii (de fapt, se transmite adresa de început a tabloului). Alt avantaj al tratarii unitare pointer-tablou este aplicarea aritmeticii pointerilor pentru accesarea elementelor unui tablou. Identitate pointer-tablou se reflecta cel mai bine în operatiile cu siruri de caractere, unde sirul de caractere este un tablou de caractere sau un pointer la caracter.

Prezentam în cele ce urmeaza unele aspecte ale relatiei dintre pointeri si tablouri.

int tablou[5];
int *tablou_ptr;

tablou_ptr=&tablou[0];
Dupa secventa de mai sus, pointerul tablou_ptr va indica spre primul element al tabloului, deci spre începutul zonei de memorie unde este stocat tabloul. Deoarece variabila tablou este vazuta în C ca un pointer, acelasi efect s-ar fi obtinut prin atribuirea: tablou_ptr=tablou;.

Pentru a accesa elementele tabloului, se incrementeaza valoarea pointerului, astfel daca tablou_ptr=tablou; atunci *(tablou_ptr++) va returna valoarea lui tablou[0], dupa care tablou_ptr va arata spre tablou[1].

Atentie! *(tablou_ptr++) va returna valoarea lui tablou[0], dupa care se va incrementa valoarea lui tablou_ptr, aratând spre tablou[1]. În schimb, (*tablou_ptr)++ va incrementa valoarea spre care arata tablou_ptr, returnând astfel tablou[0]++.

În acelasi context, propunem ca exercitiu rularea urmatorului exemplu:

#include <stdio.h>

void main(void)
{
  int t[4]={0, 1, 2, 3};
  int *p=&t[1];

  printf("%d\n", *p++); /* afiseaza valoarea
                           lui t[1] */
  printf("%d\n", *++p); /* afiseaza valoarea
                           lui t[3] */
  printf("%d\n", ++*p); /* afiseaza valoarea
                           incrementata a lui t[3] */
}


next up previous contents
Next: Pointeri la functii Up: Pointeri Previous: Pointeri ca argumente ale   Cuprins
Cristian Gavrila 2001-10-02