Sunteți pe pagina 1din 7

1.

Alocarea,realocarea si eliberarea dinamica a memoriei in limbajul C


Funcia malloc permite alocarea unui bloc de memorie a crui dimensiune se specific n octei. Funcia
returneaz un pointer spre nceputul zonei alocate. ntruct acest pointer trebuie s permit memorarea
oricrui tip de dat n zona alocat, el este de tip void *.
Prototipul funciei este:
void *malloc (unsigned n); unde n este numrul de octei al zonei de memorie care se aloc. n cazul n
care n este prea mare, funcia returneaz pointerul NULL.
Exemplu:
int *p;
p = malloc(5 * sizeof (int) ); malloc va aloca 5*4=20 de octeti
Funcia free elibereaz o zon de memorie alocat prin malloc. Prototipul ei este:
void free (void *p); unde p este pointerul returnat de malloc la alocare, deci este pointerul spre nceputul
zonei care se elibereaz.
Functia realloc
Prototipul functiei realloc este:
void *realloc(void *p, size_t dimensiune);
Functia realloc modifica marimea unui spatiu pentru date deja existente. p este un pointer catre o zona de
memorie deja alocata. Daca p este NULL functia realloc functioneaza ca si malloc, alocand un bloc de
atatia octeti cati sunt precizati de dimensiune. Daca p nu este NULL atunci p trebuie sa fie un pointer
returnat de un apel anterior al uneia din functiile malloc, calloc sau realloc. Parametrul dimensiune
determina noua marime in octeti a blocului de memorie alocat.
Exemplu: array = (int*) realloc (array, 20 * sizeof(int));

2. Alocarea dinamic a memoriei pentru un tablou unidimensional
int *alocare(int n){
int *a;
a=(int*)malloc(n*sizeof(int));
return a;

3. Tablou unidimensional de pointeri. Pointer la pointer
Tablou unidimesnional de pointeri ---

Pointer la pointer- n primul rnd un pointer este o variabil, la fel ca orice alt variabil, dar
care deine adresa unei variabile.
Un pointer la un pointer este o variabil, la fel ca orice alt variabil, dar care are o valoare
adresa pointer lui. Declaraia de un pointer pointer arata astfel **p;




4. Alocarea dinamic a memoriei pentru un tablou bidimensional folosind tabloul
unidimensional de pointeri

http://stackoverflow.com/questions/13295318/allocate-a-2d-array-in-c-with-one-
dimension-fixed priviti sa vedeti daca corect am gasit.
Sau
int main(void) {
1. // your code goes here
2. int *(a)[10];
3. int i;
4. for (i = 0; i < 10; i++)
5. {
6. a[i] = (int*)malloc(10 * sizeof(int));
7. }
8. return 0;
9. }


5. Tabloul bidimensional alocat static. Pointer la tablou unidimensional

1. #include <stdio.h>
2.
3. int main(void) {
4. // your code goes here
5. int a[10][10];
6. int **pa = &a[0];
7. return 0;
8. }
9.

6. Alocarea dinamic a memoriei pentru un tablou bidimensional folosind pointer la
pointer
main ()
{
int ** a; int i, j, nl, nc;
printf ("nr. linii="); scanf ("%d",&nl);
printf ("nr. col. ="); scanf ("%d",&nc);
// memorie pentru vectorul de pointeri la linii
a = (int**) malloc (nl*sizeof(int*));
for (i=0; i < nl; i++)
// aloca memorie pentru fiecare linie i
a[i] = (int*) calloc (nc, sizeof(int)); //

7. Trimiterea n funcie tabloului bidimensional alocat dinamic

int **alocare_dinamica_a_tabloului(int n, int m) /*Functie ce returneaza un pointer la
pointer (tabel bidimensional) da tocinee adresa in memorie unde se alfa A[0][0]*/
{
int **A; /*se declara un pointer la pointer (tabel
bidimensional)*/
int i;
A=malloc(n*sizeof((*A)));/*Pointerului A se aloca memorie cu n pointeri la int(numarul de
rinduri )*/
if(A==NULL) /*daca n=0,tabelul are 0 rinduri,rezulta ca lui A nu o sa i se aloce memorie sh
nu se returneaza nimic*/
{
return A; /*se returneaza A=NULL, adica nimic*/
}
for(i=0;i<n;i++) /*Amu avem un tabel de n pointeri la int*/
{
A[i]=malloc(m*sizeof(int)); /*pentru fiecare din n pointeri la int se aloca memorie pentru m
intregi (coloanele), la momentu dat avem un tabel de n linii sh m coloane cu intregi*/
if(A[i]==NULL) /*in caz cind avem m=0, tabelu are n linii sh 0 coloane, atunci tabelu ii
imposibil de alocat sh se returneaza NULL*/
{
return NULL;
}
}
return A;}


8 Trimiterea n funcie tabloului bidimensional alocat static

1. #include <stdio.h>
2.
3. // cu matricile alocate static doar asa poti
4. // indicele [10] e obligatoriu sa fie ca
5. // in matricea care a fost creata in afara functiei
6. void test(int a[][10])
7. {
8. a[0][0] = 2;
9. }
10.
11. int main(void) {
12. // your code goes here
13. int a[10][10];
14.
15. a[0][0] = 1;
16. printf("%d", a[0][0]);
17. test(a);
18. printf("%d", a[0][0]);
19. return 0;
20. }

9. Tipul CHAR reprezint o mulime finit i ordonat de caractere din setul ASCII ( American
Standard Code for Information Interchange ) extins.
Declararea unui tablou de caractere se face astfel: char nume_tablou[dimensiune_maxim];
Exemple: char sir[20]; // tablou de 20 de caractere
char t[10]; // tablou de 10 de caractere
10, 13.Functiile standart pentru introducerea de la tastatura a unui character sint:
a) scanf (argumentul) c) getch () e) get (sir)
b) getchar () d) getche ()
11, 14.Functiile standart pentru afisarea pe ecran a unui caracter sint :
a) printf (argumentul) c) putch ()
b) putchar () d) puts (sir)
15.Functiile din biblioteca standar pentru prelucrarea caracterolor si a string-urilor sint:
a) strlen (nume_sir) - returneaz un numr ntreg ce reprezint lungimea unui ir de caractere, fr
a numra terminatorul de ir
b) strcmp (sir_1, sir_2) - funcia compar cele dou iruri date ca argument i returneaz o valoare
ntreag egal cu diferena dintre codurile ASCII ale primelor caractere care nu coincid.
c) strcpy (sir_destinatie, sir_sursa) - funcia copiaz irul surs n irul destinaie.
d) strcat (sir_destinatie, sir_sursa) - funcia concateneaz cele dou iruri: irul surs este
adugat la sfritul irului destinaie
16.Clasificarea tipurilor de date ale limbajului C:


16. Clasificarea tipurilor de date ale limbajului C.
1-tipuri de date fundamentale:
integer, are sintaxa : int var1; are 4 bytes, +,- 2^32, adica 32 bites
floating, sintaxa, float var1, are 4 bytes,precizia de 6 cifre; double var2; are 8 bytes,
precizia de 14 cifre
character, char var1='a'; are 1 byte, caracterele sunt amplasate intrun tablou ASCII, fiecare
caracter avind valearea liu de exemplu 'a'=97...



2-date derivate,compuse
tablouri
pointeri
structuri
enumerari

17. Tipuri de date definite de utilizator. Caracteristica general


18. Tipul de date structura. Declaraia a unui tip de date structura i a variabilelor de
tip structura. Utilizarea instruciunei typedef
structurile sunt colectii de variabile de diferite tipui sub un singur nume,aceasta se face
pentru a controla variabilile despre ceva care sunt relationate intre ele mai usor,
struct person
{
char name[50];
int cit_no;
float salary;
};

Inside main function:
struct person p1, p2, p[20];
sau
struct person
{
char name[50];
int cit_no;
float salary;
}p1 ,p2 ,p[20];

typedef se foloseste petru a crea niu tipuri de date definite de programatror
typedef struct complex{
int imag;
float real;
}comp;

Inside main:
comp c1,c2;


19. Cmpurile structurei. Operaiuni de acces la cmpurile structurei. Operaiunea de
atribuire pentru variabile de tip structura
cimpurile structurei se refera la membriei, la care se face cces cu acutorul ","(punctului)
20. Tabloul unidimensional de structuri. Baza de date n forma de tablou de structuri.
Operaiuni de prelucrare a tabloului de structuri
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>

typedef struct miha{
int unu;
int doi;
}mih;

int main()
{
int i;
mih n1;
mih j[10];
for(i=0;i<2;i++){
printf("\nintroduceti unu:");
scanf("%d",&n1.unu);
printf("\n introduceti doi:");
scanf("%d",&n1.doi);
j[i]=n1;
}
for(i=0;i<2;i++){
printf("\n\n%d %d",j[i].unu,j[i].doi);}
}

21. Ciclu infinit i instruciunea switch pentru menu de operaiuni de prelucrare a
tabloului de structuri
ciclul infinit in C poate fi realizat de mai multe forme, fie cu instructiunea while, de
exemplu while(1){...}; va crea un cilcu infinit, sau prin for, cu co nditia care niciodata se
va opri, e exemplu for(i=5;i<0;i--){....};
instructiuena switch se foloseste atunci cin deste nevoie de a fi aleasa o parte a codului din
mai multe alternative care paote rula, de ecemplu un menu, aceasta de poate executa si prin
fuctiile if...else, dar switch face programul mai complex, swithc se declara de forma:
switch (expression)
{
case constant1:
codes to be executed if expression equals to constant1;
break;
case constant2:
codes to be executed if expression equals to constant3;
break;
.
.
.
default:
codes to be executed if expression doesn't match to any cases;
}
cinditia functiei switch arata care parte a codului se va executa, daca conditia nu este
indeplinita atunci se executa defoult.
22. Tipul de date union. Declaraia a unui tip de date union i a variabilelor de tip
union. Utilizarea instruciunei typedef
uniunile sunt similare structurilor in C,sunt un tip derivat de la structuri,sunt declarate
similar structurilor:
union car{
char name[50];
int price;
};

23. Cmpurile variabilei de tip union. Operaiuni de acces i de atribuire. Deosebiri
pentru variabile de tip structura i de tip union
deosebirea uniunilor de structura este cantitatea memoriei utilizate pentru a aloca
informatia.uninunile aloca memorie doar mariea cea mai mare a variabilei din interior.
toti membrii unei structuri pot fi accesati oricind, dar la uniuni doar un membru poate fi
accesat in acelasi timp,ceilalti vor contine gunoi, adica uniunea va contine doar o
informatie a unui menbru al sau, ceilalti menbru nu vor contine nimic.
24. Argumentele (parametrii) funciei main( )
La lansarea programului in executie din sistemul de operare in linia de comanda se pot
transmite informatii (argumente) catre programul respectiv. Declaratia functiei main in
acest caz
are forma generala:

tip_rez main (int argc, char *argv[], char *env[]) {
. . . . .
}

unde
argc specifica numarul de argumente, avand o valoare 1;
argv[] este un tablou de pointeri catre siruri de carcatere reprezentand aceste argumente
introduse in linia de comanda la lansarea programului si despartite prin spatiu sau TAB.
Intotdeauna
argv[0] indica sirul de caractere nume program, argv[1] indica sirul de carcatere primul
argument,
etc.
env[] este un tablou de pointeri reprezentand o lista de parametri ai sistemului de operare,
ultimul pointer din tablou avand valoarea NULL.

S-ar putea să vă placă și