Documente Academic
Documente Profesional
Documente Cultură
Universitatea Bucuresti
Programare procedurala
- suport de curs -
Curs 6
17/11/2016 1
Facultatea de Matematica si Informatica
Universitatea Bucuresti
Agenda cursului
2. Pointeri
- definire
- aritmetica pointerilor
pointeri si tablouri
int a[3][5];
0 3 -12 10 7 1
1 10 2 0 -7 41
2 -3 -2 0 0 2
0 1 2 3 4
a [1][4] = 41;
Sintaxa
struct <nume> {
< tip 1 > <variabila 1>;
< tip 2 > <variabila 2>;
---------------------------------
< tip n > <variabila n>;
} lista de identificatori de tip struct;
Obs:
1.Daca numele tipului lipseste, structura se numeste anonima. Daca lista
identificatorilor declarati lipseste, s-a definit doar tipul structura. Cel putin una
dintre aceste specificatii trebuie sa existe.
2.Daca <nume> este prezent se pot declara noi variabile de tip structura
struct <nume> <lista noilor identificatori>;
Structuri Exemple
struct adrese {
Structura din memorie pentru variabila A
char nume[30];
de tip adrese
char strada[40];
char oras[20], jud[3]; nume 30 octeti
int cod;
};
strada 40 octeti
Numele adrese identifica
aceasta structura de date oras 20 octeti
particulara.
Structuri Exemple
Compilatorul aloca memorie in plus pentru aliniere (multiplu de 4)
Structuri Exemple
Compilatorul aloca memorie in plus pentru aliniere NUMAI CAND
AVEM TIPURI DE DATE DIFERITE!)
Structuri Exemple
struct adrese {
char nume[30];
struct {
char strada[40];
char nume[30];
char oras[20], jud[3];
char strada[40];
int cod;
char oras[20], jud[3];
} A, B, C;
int cod;
} A;
Defineste un tip de structura numit
adrese si declara ca fiind de acest
Declara o variabila numita A
tip variabilele A, B, C
definita de structura care o
precede.
Structuri Exemple
struct adrese {
Accesul la membrii structurii char nume[30];
char strada[40];
Se face prin folosirea char oras[20], jud[3];
operatorului punct. int cod;
} A, B, C;
nume_variabila.nume_camp
B = A;
Programare Procedurala Curs 6
20
Facultatea de Matematica si Informatica
Universitatea Bucuresti
2. Tipuri structurate de date
Structuri Aplicatie
Structuri Aplicatie
Structuri Aplicatie
Structuri Aplicatie
Structuri Aplicatie
Campuri de biti
Campuri de biti
In aceeasi structura pot fi combinate campuri de biti si membri normali.
struct adrese {
char nume[30]; struct angajat {
char strada[40]; struct adrese A;
char oras[20], jud[3]; float plata;
int cod; unsigned activ: 1; // activ sau intrerupt
}; unsigned orar: 1; // plata cu ora
unsigned impozit: 3; // impozit rezultat
};
Campuri de biti
Restrictii:
Uniuni
Def: Locatie de memorie impartita in momente diferite intre doua
sau mai multe variabile diferite, in general de tipuri diferite.
Uniuni
ch
Utilizate:
Uniuni
Enumerari
Constanta unui element al enumerarii este fie asociata implicit, fie explicit.
Implicit, primul element are asociata valoarea 0, iar pentru restul este
valoarea_precedenta+1.
Enumerari
Enumerari
Specificatorul typedef
Sintaxa
typedef <definiie tip> <identificator>;
Exemple:
typedef unsigned int natural ;
typedef long double tablou [100] ;
tablou a, b, c;
natural m,n,i;
Adresa de Variabila de
memorie memorie Variabile de tip pointer
Forma generala tip * nume;
- poate fi convertit la orice alt tip de pointer fara a folosi conversie explicit
de tip cu operatorul cast : (tip *) Nu e valabil pt celelalte tipuri!
Adresa Valoarea
variabilei x variabilei x
2686748 279
Adrese de memorie
In C specificator de format
special pentru tiparirea valorilor
reprezentand adresele de
memorie.
%p
Incorect Corect
Programare Procedurala Curs 6
46
Facultatea de Matematica si Informatica
Universitatea Bucuresti
3. Pointeri
Deoarece p este pointer de tip intreg, vor fi transferati in y doar 4 octeti din
informatie, nu toti 8 care formeaza in mod normal un numar in virgula mobila.
Incorect Corect
Programare Procedurala Curs 6
47
Facultatea de Matematica si Informatica
Universitatea Bucuresti
3. Pointeri
Aritmetica pointerilor
Utilizare pointeri:
- expresii aritmetice
- asignari
- comparatii.
Aritmetica pointerilor
Initializarea pointerului *pv cu adresa primului element al unui tablou
int *pv = v;
pv = &v[0];
Adresa celorlalte
elemente ale vectorului:
Aritmetica pointerilor
pv
+ 8 bytes
-16 bytes
+ 4 bytes
+ 4 bytes
- 4 bytes
- 4 bytes
diferenta = nr de obiecte
de acelasi tip care
despart cele 2 adrese
Programare Procedurala Curs 6
53
Facultatea de Matematica si Informatica
Universitatea Bucuresti
3. Pointeri
In general utilizata cand 2 sau mai multi pointeri indica acelasi obiect.
Reamintire:
1. *(pv+x) v[x]
2. &v[x] = pv + x
Rezolvare:
Aritmetica pointerilor Aplicatii
Concluzii
structurate de date:
- Structuri
-Enumerari
-Campuri de biti
Perspective
Cursul 7:
1. Siruri de caractere
2. Functii
- Pointeri la functii