Documente Academic
Documente Profesional
Documente Cultură
RECAPITULARE (CONT.)
Pointeri, masive, transmiterea parametrilor
Pointerii
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Definire
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Inițializare
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Utilizare
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Operații cu pointeri
● Definire
● Inițializare
● Dereferențiere
● Incrementare/decrementare
● Diferența a doi pointeri
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Incrementare/decrementare
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Incrementare/decrementare
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Caz particular: adunarea unui întreg
nume_pointer = nume_pointer + 3;
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Scăderea a doi pointeri
● Așa cum am văzut expresia de mai jos este una validă
nume_pointer2 = nume_pointer + 3;
nume_pointer2 - nume_pointer = 3;
● Deci scăderea a doi pointeri este posibilă, iar rezultatul este diferența efectivă
dintre adrese împărțită la sizeof(T) sau, cu alte cuvinte, câte variabile de tip T
încap între cei doi pointeri
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Atenție!
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Identificatorul const în cazul pointerilor
● Pointerii făcând referire la adresa unei variabile există 3 situații posibile de folosire
a identificatorului const:
○ pointeri constanți: odată salvată o adresă, nu mai poate fi modificată
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Identificatorul const în cazul pointerilor
int x = 5; int y = 10;
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Vectorii
● Tipuri de date ce folosesc o zonă de memorie contiguă pentru a salva mai multe
valori de același tip
● Pot fi alocați static sau dinamic
● Cei alocați static sunt salvați în stack și trebuie să aibă un număr de elemente
cunoscut în momentul compilării
● Cei alocați dinamic se alocă și se dezalocă în heap și pot avea un număr de
elemente cunoscut la momentul execuției
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Definire
int array1[5];
float array2[4];
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Matricele
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Definire
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Dezalocare
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Definire cu și dezalocare cu new și delete
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Legătura dintre pointeri și operatorul []
○ matrice[i][j] ⇔ *(*(matrice + i) + j)
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Vectorii de caractere
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Utilizare vectori de caractere
char sir[20];
char* sir_dinamic = new char[10];
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Tipul string
● În limbajul C++ avem tip de dată special definit pentru șiruri de caractere - string
● string este o clasă în C++ (vom descoperi în curând ce este o clasă) așadar
prelucrările se fac în mod direct prin operatori sau metode (descoperim și ce
este o metodă mai târziu 😃)
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Tipul string
string sir1;
string sir2 = "ceva";
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Transmiterea parametrilor
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Transmiterea parametrilor prin valoare
int main() {
int x = 5;
int y = 3;
suma(x, y);
cout << x;
}
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Transmiterea parametrilor prin adresă
int main() {
int x = 5;
int y = 3;
suma(&x, y);
cout << x;
}
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Transmiterea parametrilor prin referință
int main() {
int x = 5;
int y = 3;
suma(x, y);
cout << x;
}
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Pointeri la funcții
● Atât în C, cât și în C++ putem utiliza pointeri care salvează adresa de memorie a
unor funcții
● Aceștia implementează o formă incipientă de polimorfism (un pointer la funcție
poate face diferite tipuri de prelucrări prin schimbarea adresei către care
pointează)
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Exemplu
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Directive de preprocesare
#define NULL 0
#define BEGIN {
#define END }
//...
#undef NULL
//...
#if, #elif, #else, #endif, s.a.
© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.