Pointeri

Curs
6/10 (3 voturi)
Conține 1 fișier: doc
Pagini : 11 în total
Cuvinte : 3251
Mărime: 19.42KB (arhivat)
Publicat de: Aurelian Alexa
Puncte necesare: 0

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

Preview document

Pointeri - Pagina 1
Pointeri - Pagina 2
Pointeri - Pagina 3
Pointeri - Pagina 4
Pointeri - Pagina 5
Pointeri - Pagina 6
Pointeri - Pagina 7
Pointeri - Pagina 8
Pointeri - Pagina 9
Pointeri - Pagina 10
Pointeri - Pagina 11

Conținut arhivă zip

  • Pointeri.doc

Alții au mai descărcat și

Ingineria Sistemelor de Programe - Capitolul 2

Capitolul II Structuri complexe de date in ingineria programarii 1. Generalitati Variabilele utilizate in Limbajul C/C++, din punct de vedere al...

Referințe și pointeri

In C++ exista doua modalitati de lucra cu adrese de memomorie: pointeri si referinte. Pointeri Pointerii sunt variabile care contin adresa unei...

Variabile

6. Variabile Prin variabilă se înţelege o dată a cărei valoare se poate schimba pe parcursul execuţiai programului. Unei variabile i se atribuie...

Instrucțiunile limbajului C++

5. Operaţii de intrare/ieşire În C, spre deosebire de alte limbaje, sistemul intrare/ieşire nu este parte a limbajului, ci este introdus printr-un...

Instrucțiuni

O instrucţiune este o parte a programului care poate fi executată. Aceasta înseamnă că o instrucţiune specifică o acţiune. Standardul ANSI C şi cel...

Instrucțiuni de intrare

7. Instrucţiuni de iterare Instrucţiunile de iterare (ciclare) permit ca un grup de instrucţiuni să se execute repetat, până se îndeplineşte o...

Tablouri și Șiruri de Caractere

Un tablou este o colecţie de variabilede acelaşi tip, apelate cu acelaşi nume. Tablourile sunt plasate într-o zonă de memorie contiguă. Accesul la...

Limbajul C

În continuare vom defini un calculator, ca fiind un sistem electronic de foarte mare complexitate, capabil de prelucrarea automata a datelor de...

Te-ar putea interesa și

Realizarea unei Baze de Date cu Ajutorul Limbajului C

1.Introducere Limbajul C s-a impus în principal datoritã existentei unui standard care contine toate facilitãtile necesare unui limbaj pentru a...

Conectarea Microprocesorului I8086 la Memorie de Tip Rom și Ram

1 Arhitectura internă a microprocesoarelor din familia Intel pe 16 biţi În general când se vorbeşte despre un microprocesor (µP) se înţelege că...

Alocare dinamică - Turbo Pascal

ALOCAREA DINAMICA A MEMORIEI 1. INTRODUCERE Memoria RAM este împartita în locatii de memorie. Fiecare locatie memoreaza un octet (8 biti) si are...

Pointeri

Tema laboratorului: POINTERI Pointerii sunt variabile care au ca valori adresele altor variabile (obiecte). Din punctul de vedere al...

Cercetări marketing - laser pointer

Problema decizională Lansarea noului laser pointer “Genius” pe piaţa din România. Obiectivele cercetării: Pornind de la problema decizională...

Tipuri de date - pointeri

Multimea de valori ale tipului predefinit de date pointer(indicator) consta din adrese şi valoarea specială nil. Însă, spre deosebire de tipurile...

Algoritmi și Structuri de Date

Modulul 0. Alocare dinamica in limbajul C Capitolul 0. Pointeri si alocare dinamica. Tipul de date struct 0.1 Pointeri si alocare dinamica O...

Referințe și pointeri

In C++ exista doua modalitati de lucra cu adrese de memomorie: pointeri si referinte. Pointeri Pointerii sunt variabile care contin adresa unei...

Ai nevoie de altceva?