Documente Academic
Documente Profesional
Documente Cultură
Introducere in pointeri
• memorie este ordonata ca Memoria RAM
PCLP13 - 1 PCLP13 - 2
1
Alocarea spatiului in memorie Utilizarea pointerilor
7 f f f f f f chex Stiva int x = 2, y; x y px
int *px; 2 2 200
px = &x;
200
Date dinamice y = *px; x px
1000 8000hex
Date statice
- Operator de referentiere - &
1000 0000hex
Instructiuni
- Operator de dereferentiere - *
0040 0000hex
Rezervat y=10+*px; y=10**px; y=10/*px;
0
PCLP13 - 5 PCLP13 - 6
PCLP13 - 7 PCLP13 - 8
2
Pointeri si siruri Exemple de utilizare (1)
int a[10], *pa=a; Exemplul 1: Interschimbarea valorilor a doua variabile
Element Folosind Folosind Folosind Folosind #include <stdio.h>
accesat indexarea numele pointerul pointerul ca
(ca pana tabloului ca indexat pointer void interschimbare(int *x, int *y)
acum) adresa
primul a[0] *a pa[0] *pa
{ int aux;
printf(″In functie, la intrare *x=%d, *y=%d\n″, *x, *y);
al doilea a[1] *(a+1) pa[1] *(pa+1)
aux = *x;
al treilea a[2] *(a+2) pa[2] *(pa+2) *x = *y;
al (i+1)-lea a[i] *(a+i) pa[i] *(pa+i) *y = aux;
ultimul a[n-1] *(a+n-1) pa[n-1] *(pa+n-1) printf(″In functie, la iesire, *x=%d, *y=%d\n″, *x, *y);
}
PCLP13 - 9 PCLP13 - 10
PCLP13 - 11 PCLP13 - 12
3
Exemple de utilizare (5)
Exemple de utilizare (4)
void citire_sir(int n, int *sir)
Exemplu: Determinarea valorii maxime dintr-un sir de numere { int i;
intregi for( i=0; i<n; i++)
#include <stdio.h> {printf (″el[%d]=″, i+1) ;
scanf(″%d″, &sir[i]);
int max1(int n, int *a) }
{ int i, max; }
max = a[0]; void afisare_sir(int n, int *sir)
for (i=1; i<n; i++) { int i;
if(a[i] > max) for( i=0; i<n; i++)
max = a[i]; printf (″%d ″, sir[i]) ;
return max; printf(″\n″);
} }
PCLP13 - 13 PCLP13 - 14
PCLP13 - 15