Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Clase de memorie

c


Clase de memorie.

Variabilele automate (automatice).

Vom introduce pentru inceput notiunea de bloc.

Bloc: un bloc este o secventa de declaratii urmata de o secventa de instructiuni, totul marginit de acolade.



Variabilele automate sunt variabile locale fiecarui bloc sau functii. Ele se cre 717d35h aza la intrarea in bloc sau functie si sunt distruse la iesirea din bloc (functie).

Aceste variabile fiind locale blocului (functiei), nu sunt cunoscute in afara blocului (functiei) de aceea se pot folosi aceleasi nume de de variabile in blocuri (functii) diferite.

Compilatorul le va trata ca si cum ar avea nume diferite.

Cu ajutorul urmatorului exemplu ne putem edifica asupra domeniului de valabilitate a variabilelor automate.

Exemplul 2.4.1.1.

main()

printf("x este %d",x);

Dupa rulare acest program va da mesaj de eroare din care rezulta ca variabila x nu a fost declarata in functia main.

Aceasta deoarece blocul in care a fost declarata variabila x incepe incepe la linia 2 si se termina la linia 5.

Rezulta ca variabila de la linia 6 nu este declarata.

Declaratia variabilei x este valabila doar in interiorul blocului.

Deoarece variabila nu este cunoscuta in afara bocului ea poate fi folosita in interiorul altui bloc sub acelasi nume.

Exemplul 2.4.1.2.

main ()

In concluzie , domeniul de valabilitate a variabilelor automate este urmatorul:

n   o variabila declarata intr-un bloc este valabila in toate blocurile cuprinse in blocul in care a fost declarata cu exceptia blocurilor unde a fost redeclarata.

Exemplul 2.4.1.3.

main ()

/* sfarsit bloc 2 */

printf("i= %f",i);

/* sfarsit bloc 1 */

Variabile externe.

O variabila externa este o variabila cu caracter global a carei declaratie este valabila in tot programul .

Aceste tipuri de variabile se definesc in afara oricarei functii care intra īn alcatuirea programului.

Observam ca am folosit doua notiuni pana acum si anume declaratia si definitia.

Deosebirea intre declaratia unei variabile externe si definirea ei este urmatoarea:

n   o declaratie stabileste proprietatile unei variabile externe: marimea, tip, etc.

n   o definitie provoaca si alocare de memorie.

Pentru un fisier sursa domeniul de definitie si actiune a variabilei externe este tot fisierul sursa pana la sfarsit.

Variabilele īsi vor pastra valorile in tot programul.

De obicei cuvantul extern se specifica cand avem mai multe fisiere sursa si variabila apare in alt fisier decat cel in care a fost definita sau cand ea este referita intr-o functie inainte ca ea sa fie definita.

Deci daca avem nevoie de o variabila externa si nu avem cazurile de mai sus atunci nu trebuie specificat cuvantul extern.

In general functiile sunt variabile externe, afara de cazul in care se specifica altfel.

Variabilele externe mai pot fi folosite si pentru transmiterea parametrilor functiilor.

Exemplul 2.4.2.1.

/* Variabila globala intr-un singur fisier sursa. */

int n=3;

main()

fact ()    /* transmiterea parametrilor prin variabile externe */

Variabila n va fi cunoscuta in tot programul .

In acest caz declaratia poate fi folosita pentru a transmite parametri.

In momentul cand avem mai multe fisiere sursa daca in afara oricarei functii avem :

int n;

float k;

enunturi ce definesc variabilele n, k externe, se va produce alocarea de memorie si vor servi si ca declaratii pentru restul fisierului sursa.

Enunturile     extern n;

extern float k;

vor declara pentru restul fisierului sursa ca n este intreg si k real. Aceste declaratii nu vor provoca crearea variabilelor si nici nu aloca memorie.

Nu pot exista mai multe definitii pentru variabilele externe folosite. Initializarea variabilelor externe se asociaza numai cu definitia.

Exemplul 2.4.2.2.

Definirea unei variabile externe intr-un fisier si declararea ei in alt fisier.

Fie un fisier sursa nul. c care contine o functie de adunare a doua matrici.

Presupunem ca a, b sunt matricile care se aduna si c este matricea rezultat.

a, b, c vor fi parametrii functiei adun (functie care aduna cele 2 matrici si care scrie rezultatul in c).

m, n - sunt variabilele care se definesc ca "extern" in programul principal.

m - numarul de linii;

n - numarul de coloane.

#include "stdio.h"

int m , n ;

main ()

# include "adun.c"    /* directiva include permite includerea unui fisier */ /* sursa in program */

Continutul fisierului adun.c

void adun(double a [10][10] , double b[10][10], double c [10][10])

Variabile statice.

Variabilele statice se declara prin cuvantul cheie static. Aceste variabile sunt de doua categorii:

n   statice interne;

n   statice externe.

Daca se declara o variabila statica interna , atunci ea va avea domeniul de valabilitate al unei variabile automate insa va avea o proprietate in plus si anume isi va pastra valoarea.

Daca variabila se va declara intr-o functie variabila isi va pastra valoarea de la un apel la altul . Aceasta variabila va oferi o memorie particulara functiei respective.

Variabilele statice externe se definesc in afara oricarei functii . Ele sunt variabile globale numai pentru fisierul sursa in care au fost declarate.

Varibile registru

variabilele registru (register) sunt variabile care se folosesc foarte des.

Pentru scurtarea timpului de executie , compilatorul , daca e posibil, le va incarca in registrele calculatorului ceea ce va duce la programe mai rapide.

Exemplu 2.4.4.1.

register int a ;

register char b;

Clasa register se aplica doar la variabile automate si la parametrii formali ai unei functii.

Exemplul 2.4.4.2.

func (x,y)

register int x;

register int y;



Document Info


Accesari: 1146
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )