Previzualizare curs:

Extras din curs:

POINTERI

Pointerul este o variabila care contine o adresa de memorie. Aceasta variabila contine adresa unei variabile. Avantajele utilizarii pointerilor sunt:

- ofera posibilitatea de a modifica argumentele de apelare a functiilor;

- permit o alocare dinamica a memoriei;

- pot îmbunatatii eficienta anumitor rutine.

Pointerii reprezinta una din cele mai puternice caracteristici ale limbajului C, dar si periculoase. Daca pointerii nu sunt initializati corect sau daca contin valori incorecte pot determina blocarea calculatorului, sau sa conduca la erori greu de depistat.

Variabile de tip pointer

Daca o variabila urmeaza sa contina un pointer( o adresa, aceasta trebuie declarata astfel:

tip *nume;

unde:

- tip este tipul de baza al pointerului, si specifica tipul obiectului pe care pointerul îl poate puncta (indica, pointa);

- nume este numele variabilei de tip pointer;

- * - asterix – operator de indirectare.

Tipul de baza al pointerilor defineste tipul de baza catre care indica acesta. De exemplu, daca o variabila numita px contine adresa unei variabile x de tip întreg se spune ca px pointeaza pe x. Daca x se afla în memorie la adresa 200, atunci px va avea valoarea 200. Fie declaratia:

int *px, x; / px pointer la întreg, x variabila de tip întreg */

Operatorii folositi în cazul pointerilor sunt & si *. Operatorul & “adresa lui”returneaza adresa de memorie a variablilei pe care o precede.

px = & x; /* px contine adresa lui x */

Operatorul * (“de la adresa”) returneaza valoarea de la adresa pe care o precede.

y = *px; /*daca px este adresa lui x, y devine egal cu x , adica cu ce e la adresa px*/

Este important ca variabilele de tip pointer sa indice întotdeauna corect tipul de date. De exemplu, daca declarati un pointer de tipul int, compilatorul întelege ca adresa pe care o contine memoreaza o variabila de tip întreg, si nu de alt tip.

Fie urmatorul program:

# include <stdio. h>

void main (void)

{

int *p;

float a, b;

p = &a; /* p indica catre un float, desi este pointer de tip întreg */

b = *p;

}

Observatie. Compilatorul nu da mesaj de eroare (eventual avertisment), desi pointerului p de tip întreg i se atribuie adresa unui float (a). În final lui b nu i se atribuie valoarea lui a. Pointerul p fiind de tip întreg, vor fi transferati în b doar doi octeti, nu toti cei opt care formeaza în mod normal un numar în virgula mobila.

Valoarea unei variabile poate fi referita printr-un pointer, proces numit indirectare. Operatorul * poate fi folosit în partea stânga a unei instructiuni de asignare pentru a atribui o noua valoare folosind un pointer.

Exemplu:

# include <stdio.h>

void main (void)

{

int a, *b;

a = 55; // variabila a primeste valoarea 55

b = &a; // b primeste adresa lui a

*b = 135; // asigneaza lui a valoarea 135 folosind pointerul b

printf (“ valoarea lui a = %d” , a);

}

programul asigneaza lui a o valoare, indirect, folosind pointerul b.

Prin declararea unui pointer, se creaza o variabila capabila sa contina o adresa de memorie. Initializarea unui pointer nu are nici un sens, este o greseala. Exemplu:

# include <stdio.h>

void main (void)

{

int *a;

*a = 123; // incorect – a nu puncteaza nici un obiect

}

Printr-o instructiune de atribuire unui pointer poate sa i se atribuie un alt pointer. Exemplu:

# include <stdio.h>

void main (void)

}

int a = 1234;

int *b, *c;

b = &a;

c = b;

printf (“Valoarea lui a = %d Adresa lui a este %p “, a,c);

}

Aritmetica pointerilor

In plus, fata de operatorii * si &, în expresiile cu pointeri pot fi aplicati numai operatorii aritmetici +, ++, - si --. Mai mult, unui pointer îi pot fi adunate/scazute numai cantitati întregi.

Operatiile cu pointeri sunt efectuate relativ la tipul pointerului. De fiecare data când un pointer este incrementat, el va puncta articolul urmator. De exemplu, daca avem declaratia:

int *p;

si ca el contine adresa 1000. Dupa executarea instructiunii:

p ++;

si daca tipul int se reprezinta pe 2 bytes, p va avea valoarea de adresa 1002 si nu 1001.

Pointerul p va indica spre urmatorul întreg. Acelasi lucru este valabil si pentru

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • Pointeri.doc
Alte informații:
Tipuri fișiere:
doc
Nota:
6/10 (3 voturi)
Nr fișiere:
1 fisier
Pagini (total):
11 pagini
Imagini extrase:
11 imagini
Nr cuvinte:
3 251 cuvinte
Nr caractere:
17 061 caractere
Marime:
19.42KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Curs
Domeniu:
Limbaje de Programare
Predat:
la facultate
Materie:
Limbaje de Programare
Sus!