start     Articole     Despre mine     Contact     Cursul ABCprog    

Cum arata variabilele in C si ce sunt tipurile de date

După ce ai făcut un prim program în limbajul C și ți-am explicat structura generală a programelor C, a venit timpul să vorbim despre variabile. Îți amintești ce este o variabilă, nu-i așa? (Dacă nu, te invit sa (re)parcurgi lecția asta.)

Chiar și un calculator de buzunar (și nu mă refer aici la telefonul tău mobil, ci la acele dispozitive folosite (din ce în ce mai puțin în prezent) pentru a efectua calcule matematice) are posibilitatea de a memora o valoare. Cu atât mai mult calculatorul (computerul) pe care îl programezi.

Acesta din urmă permite memorarea unui număr extrem de mare de valori. (Pentru asta este RAM-ul calculatorului.)

 

Variabilele sunt instrumentul prin care programatorul are acces la memoria (de tip RAM a) calculatorului. Fiecare variabilă definită în program identifică o “bucățică” din RAM.

Ce înseamnă acest “identifică”?… Înseamnă că variabila e ca un soi de păpușă voodoo (ai văzut prin filme, nu?) care îți permite să controlezi bucățica respectivă de memorie. Ce-i faci “păpușii” (variabilei, adică), “simte” memoria. (Voodoo, ți-am zis 🙂 !)

Orice variabilă e un loc din memorie în care poți să scrii valori pe care ulterior poți să le citești sau rescrii (și poți repeta aceste două operații de oricâte ori și în orice ordine).

Deci variabila este un nume pe care îl folosești în program pentru o locație de memorie în care poți scrie o valoare și din care poți citi valoarea scrisă acolo.

 

OK, deci e clar până aici că variabila în C are nume și are valoare. (Da, toate variabilele sunt maneliste din punctul ăsta de vedere.) 🙂

Pe lângă nume, mai are tip și mai are adresă. De adresa variabilei ne vom ocupa atunci când vom vorbi despre pointeri. Aici vom discuta doar despre nume și despre tip (și despre legătura lor cu adresa și, respectiv, cu valoarea).

Cum se poate numi o variabilă în C

Numele unei variabile în limbajul C este un caz particular de identificator. (“Caz particular” înseamnă că toate numele de variabile sunt identificatori, dar există și identificatori care nu sunt nume de variabile.)

Și ce e un identificator în C?

Este un “cuvânt” format din litere (mici, mari), cifre și simbolul “_” (“underline”, sau “underscore”) și care nu începe cu o cifră.

 

Ziceam că există o legătură între numele unei variabile și adresa sa din memoria calculatorului…

E evident că fiecare variabilă are o adresă unică în memorie (căci dacă ar avea aceeași adresă, atunci ar fi vorba despre aceeași locație de memorie, deci despre aceeași variabilă). Am putea, deci, să folosim drept nume pentru variabile adresele lor din memorie. Dar e clar că programele n-ar mai fi clare, nu? 🙂

Așa că în loc de adresă (care e un număr cu multe cifre) îi putem da drept nume un cuvânt care să fie ușor de reținut și poate chiar să aibă o semnificație clară în program.

Evident, nu putem folosi același identificator pentru a denumi două (sau mai multe) variabile. (E bine pentru moment să reții lucrurile așa. Vei vedea mai târziu că de fapt e posibil ca același identificator să fie folosit pentru variabile diferite în contexte diferite.)

Ce este tipul unei variabile

Tipul de dată al unei variabile este legat de valorile care se pot scrie (adică memora) în acea variabilă.

Știi că în realitate orice număr cu care operează un calculator e salvat intern ca un șir de biți, da? (Dacă nu știi cum e cu reprezentarea numerelor în binar (adică în baza 2), te invit să (re)citești acest articol.)

Principalul aspect pe care tipul de dată îl specifică este numărul de biți pe care sunt reprezentate valorile variabilelor de acel tip.

Dar tipul de dată nu specifică doar pe câți biți se salvează în calculator valorile respective, ci și modul în care sunt interpretate acele valori. De exemplu, (în limbajul C) atât tipul de date char cât și unsigned char reprezintă valori pe un octet (sau byte (= 8 biți)), însă în cazul lui char acele valori sunt interpretate ca fiind numere întregi între -128 și 127, în vreme ce în cazul lui unsigned char valorile acelea sunt interpretate ca numere întregi între 0 și 255.

Tipuri de date în limbajul C

Iată în tabelul următor tipurile de date fundamentale ce pot fi utilizate în programele realizate în C.

Dimensiune Denumire tip Valori
1 octet (8b) char -128, …, 127 (întregi)
unsigned char 0, …, 255 (întregi)
2 octeți (16 b) int -32768, …, 32767 (întregi)
unsigned 0, …, 65536 (întregi)
4 octeti (32b) long -2147483648, …, 2147483647 (întregi)
unsigned long 0, …, 4294967295 (întregi)
float … (reale)
8 octeti (64b) long long … (întregi)
unsigned long long … (întregi)
double … (reale)
10 octeti (80b) long double … (reale)

(Nu vreau să intru aici într-o discuție interminabilă despre standardele limbajului C și despre implementarea acestor standarde de către diversele compilatoare de C existente în prezent. Și n-aș vrea să vorbesc nici despre faptul că tabelul ăsta s-ar putea să nu fie valabil în unele situații. Ci sper că te vei mulțumi cu faptul că “în majoritatea cazurilor” sau “într-o lume standard” lucrurile stau (cam) ca în tabelul de mai sus.)

Dacă nu îți place cum sună tipurile astea, le poți “reboteza” folosind instrucțiunea “typedef”. De exemplu, poți crea un tip de date numit “octet” astfel:

    typedef unsigned char octet;

Definirea de variabile în C

Hai să revenim la variabile și să vedem cum le putem construi în C.

În limbajul C o variabilă se definește specificându-i numele (care trebuie să fie un identificator valid, așa cum am discutat undeva mai sus) după un nume de tip de dată.

De exemplu, o variabilă de tip număr întreg, cu semn, pe 16 biți se poate defini astfel:

    int a;

iar o variabilă numită b, de tip număr real pe 32 de biți, se poate defini astfel:

    float b;

Iată și alte definiții de variabile în C:

    char varDeUnOctet;
    unsigned char oVarCharFaraSemn;
    unsigned long long oVarUnsignedDe64Biti;

Variabilelor li se pot atribui valori chiar în instrucțiunea de definire a lor. Treaba asta se cheamă inițializare.

Hai să vedem câteva definiții de variabile cu inițializare:

    int nrIntreg16b = -3412;
    unsigned char nrNatural8b = 210;
    float nrReal32b = 3.14159;

De asemenea, poți grupa într-o singură instrucțiune mai multe definiții:

    int a, b = 3, c = 9;

Variabile globale și variabile locale

Definițiile de variabile se pot găsi în afara oricărei definiții de funcție din program. În acest caz, variabilele respective sunt variabile globale. În schimb, variabilele definite în cadrul unei funcții sunt variabile locale pentru acea funcție.

(Deocamdată poți vedea lucrurile așa: variabilele definite în interiorul funcției “main” sunt variabile locale, iar cele definite în afara funcției “main” sunt globale.)

Variabilele globale sunt “vizibile” (adică utilizabile) în orice funcție din program, în vreme ce cele locale “trăiesc” doar în funcția respectivă (adică în funcția în care au fost definite).

(Mai precis, variabilele locale “se nasc” la momentul definirii și “mor” când apare acolada de închidere corespunzătoare primei acolade deschise înainte de acea definiție.)

În general se recomandă să nu se (prea) utilizeze variabile globale. (Nici aici n-am chef să intru într-o discuție interminabilă.) Eu recomand doar să nu se abuzeze de ele.

Evident, variabilele trebuie definite în program înainte (adică “mai sus”) de locul în care sunt utilizate.

În concluzie

Variabilele din C nu sunt foarte diferite de variabilele de aici. Doar că în loc de var trebuie să folosești denumiri de tipuri de date.

Cum poți testa în Code::Blocks cele învățate în lecția aceasta?…

Uite, de exemplu, un program:

Iar output-ul său (adică ieșirea sa, adică efectul produs de rularea sa) poate fi văzut aici:

(Pe calculatorul tău lucrurile vor arăta un pic diferit, în funcție de sistemul de operare pe care îl folosești și de versiunea programului CodeBlocks pe care o ai instalată.)

Știu că lecția a fost un pic lungă, dar sper că ai reușit să mă urmărești. Dacă ai, totuși, neclarități, scrie-le, te rog, într-un comentariu mai jos.

 

Alatura-te celor peste 7000 de oameni din armata noastra de creiere cu muschi si vei primi testul care iti va spune daca ai sau nu minte de programator.

In plus, vei fi mereu la curent cu tot ce pun la cale.

(Nu trimit spam; email-ul tau e in siguranta.)

 

Cu drag,

Florin Bîrleanu





Loading Facebook Comments ...