2.4. Iniţializare
Variabilelor li se pot atribui valori iniţiale. Pentru variabilele globale valorile iniţiale se atribuie prin definiţiile lor, iar în cazul celorlalte variabile se pot atribui valori prin declaraţiile lor. Pentru că de multe ori am folosit cuvintele definiţia variabilelor sau declaraţiile varibilelor precizăm că ele au înţeles distinct în anumite contexte. O variabilă globală se defineşte o singură dată şi se poate declara ori de câte ori e necesară utilizarea ei în alte fişiere (evident declarată externă). În cazul celorlalte tipuri de variabile definiţiile şi declaraţiile coincid. Totodată definiţia şi declaraţia (prototipul) unei funcţii nu coincid.
O variabilă simplă se poate iniţializa printr-o declaraţie de forma:
tip nume=expresie;
Variabilelor globale şi statice li se atribuie valori iniţiale la lansarea programului. Expresia utilizată în cazul acestor variabile trebuie să fie o expresie constantă care să poată fi evaluată de compilator la întâlnirea ei. Aceasta, deoarece variabilele globale şi statice se iniţializează prin valori definite la compilare.
Variabilele automatice se iniţializează la execuţie, de fiecare dată când se activează funcţia în care sunt declarate. Din această cauză, nu mai este necesar ca expresia să fie o expresie constantă. Totuşi, la întâlnirea ei, trebuie să fie definiţi operanzii expresiei de iniţializare.
Exemplu:
void f(int n)
{ int i=10;
int k=i+n;
. . .
}
La întâlnirea expresiei i+n sunt deja definiţi ambii operanzi:
-
i a fost în prealabil iniţializat cu valoarea 10;
-
n are o valoare care e transferată la apel.
Variabilele globale şi statice neiniţializate au implicit valoarea egală cu zero, iar varibilele automatice neiniţializate au o valoare iniţială imprevizibilă.
Tablourile se pot iniţializa printr-o listă de expresii incluse între acolade. Astfel un tablou unidimensional se poate iniţializa folosind următorul format:
tip nume[n] = { exp1, exp2, . . . expn }
La iniţializarea tablourilor se pot utiliza numai expresii constante. Numărul expresiilor poate fi mai mic decât numărul elementelor tabloului. Elementele neiniţializate au valoarea zero în cazul tablourilor globale şi statice. Dacă se iniţializează fiecare element al tabloului atunci numărul n al elementelor acestuia nu mai este obligatoriu în declaraţia tabloului respectiv. Deci se poate scrie astfel:
tip nume[ ] = { exp1, exp2, . . . expn}
Numărul elementelor tabloului se consideră că este egal cu cel al expresiilor care realizează iniţializarea lor.
Pentru un tablou bidimensional vom folosi următoarea structură:
tip nume [n][m] = { {exp11, exp12, . . . exp1m}, // pentru linia întâi
{exp21, exp22, . . . exp2m}, // pentru linia a doua
. . .
{expn1, expn2, . . . expnm}, // pentru ultima linie
}
Numărul expresiilor poate fi mai mic decât m în oricare din acoladele corespunzătoare celor n linii ale tabloului bidimensional. În acest caz se poate omite doar numărul n (al liniilor tablourilor), m fiind obligatoriu. Formatul de iniţializare a tablourilor bidimensionale se extinde imediat pentru tablouri cu mai multe dimensiuni.
Tablourile de tip caracter pot fi iniţializate folosind un format mai simplu decât cel indicat anterior. Astfel, un tablou de tip caracter se poate iniţializa printr-o declaraţie de forma:
char sir[n] = şir_de_caractere;
Evident, marginea superioară n poate fi omisă şi în acest caz. Totodată compilatorul pune automat caracterul NUL după ultimul caracter al şirului utilizat în iniţializare.
Exemple:
1) int itab[] = {1,2,3,4,5} // tabloul de tip intreg are 5 elemente itab[0] = 1,. . . itab[4] = 5
2) int m[3][3] = {{-1,0,1},{-1},{0,1}}; // tabloul are 3 linii si 3 coloane.
Elementele primei linii sunt iniţializate astfel:
m[0][0] = –1;
m[0][1] = 0;
m[0][2] = 1;
În linia a doua se iniţializează numai m[1][0] = -1; Dacă tabloul ar fi declarat global sau static atunci m[1][1] şi m[1][2] ar avea valoarea zero. Altfel ele au o valoare imprevizibilă.
Elementele ultimei linii se iniţializează astfel:
m[2][0] = 0;
m[2][1] = 1;
-
declaraţiile de mai jos sunt identice:
char sir [ ] = {‘L’,’I’,’M’,’B’,’A’,’J’,’U’,’L’, ‘ ‘,‘C’};
char sir [ ] = {“LIMBAJUL C”};
3. Expresii, operanzi, operatori
3.1. Expresii
O expresie în limbajul C este formată fie dintr-un operand fie din mai mulţi operanzi legaţi între ei prin operatori. O expresie are o valoare şi un tip care se determină aplicând operatorii conform priorităţilor şi asociativităţii acestora.
În limbajul C operatorii se asociază de la stânga la dreapta, exceptând operatorii unari şi de atribuire, care se asociază de la dreapta la stânga.. Totodată pot fi folosite parantezele rotunde pentru a impune o anumită ordine în executarea operaţiilor.
3.2. Operanzi
Un operand în limbajul C poate fi una din următoarele elemente:
-
o constantă;
-
o constantă simbolică;
-
numele unei variabile simple;
-
numele unui tablou;
-
numele unei structuri;
-
numele unei funcţii;
-
referirea la elementul unui tablou (variabilă cu indici);
-
referirea la elementul unei structuri;
-
apelul unei funcţii;
-
o expresie inclusă în paranteze rotunde.
Unele dintre elementele de mai sus nu au fost încă definite, ele se vor prezenta în lecţiile viitoare.
Exemple: 9876 - constantă întreagă;
x - variabilă simplă;
t[i][3] - variabilă cu indici;
0xabcd - constantă hexazecimală;
t - nume de tablou;
(expresie) - expresie inclusă în paranteze rotunde;
f1 - numele unei funcţii.
Dostları ilə paylaş: |