Limbaj de programare C11
Transcript of Limbaj de programare C11
-
7/31/2019 Limbaj de programare C11
1/18
Limbaje deprogramare
Cursul XI
1 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
2/18
iruri unidimensionale
Pentru memorarea elementelor intrun sir, compilatorul
rezerva un s atiu de memorie cores unzator ornind de
la o adresa de baza. Dimensiunea spatiului de memorie este egala cu numarul
de elemente ale sirului inmultit cu numarul de octeti
necesari memorarii unui element al sirului.
#define N 5
Alocaspatiupentrua[0],a[1],a[2],a[3]sia[4] adica 5intregi
=octet per ntreg octet .
2 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
3/18
Relatia dintre vectori si ointeri
Aritmeticapointerilorpuneladispozitieoalternativapentruindexareasirurilor.
Instructiunile p = a + 1; si p = &a[1];suntechivalentesivaasignalui"p"valoarea302(adresa,
.
suma = 0
for (p = a; p < &a[N]; ++p)
suma += *p;
(adunaelementelesiruluia[])
3 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
4/18
Pointeri aritmetici Pointeriiaritmeticireprezintaunadintrasaturile
uternice ale limba ului C. Daca variabila " " este ointer
catreuntipparticular,atunciexpresia"p+1"reprezintaadresamasinapentrumemorareaurmatoareivariabilede
acesttip.
nmo s m ar,p + , ++p, p += ausens.
aca p s q sun po n er ca ree emen e e pvec or,atunci"p q"intoarcevaloarea"int"sireprezinta
numaruldeelementedintre" "si" ".
4 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
5/18
iruri ca ar umente entru functii Inantetul functiei precedente,declaratia:
int a este echivalenta cu int *a
Pe dealta parte,declaratiile demai sus nusuntechivalente daca seutilizeaza inalta parte:
primasereferalacreeareaunuipointerconstant(faraspatiudememorie);
adouavacreaovariabilapointer.
Presupunemca"v"estedeclaratcafiindunsirde100de
e emen e e p n . upaceama r u va orelementelorsale,putemutilizafunctia"suma()"pentruaadunaanumitevalorialelui"v".
5 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
6/18
-
7/31/2019 Limbaj de programare C11
7/18
Alocarea dinamica a memoriei Cpuneladispozitiepentrualocareamemorieifunctiilecalloc() simalloc() din.Acestlucruvapermiterezervareamemorieipentruunvector(deexemplu)caruiaiiaflamdimensiuneaabiaintimpulexecutiei(panaacumdeclaramdimensiuneaunuivectorcu#define incodulsursa).
calloc(n, dimensiune_tip)vareturnaunpointercatreunspatiudinmemorienecesarpentrumemorareaa"n"obiecte,fiecarepe"dimensiune_tip"octeti.
Dacasistemulnupoatealocaspatiulcerut,atunciacestavareturnavaloareaNULL.
7 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
8/18
Alocarea dinamica a memoriei InANSIC,exista tipul "size_t",dat ca"typedef"in.
Deobicei ti uleste"unsi ned".
Definitiatipuluiestefolositainprototipurilefunctiilor"calloc()"si"malloc()":
void *calloc(size_t, size_t);
void *malloc(size_t);
" " ,
acesta poate fi asignat altor pointeri fara conversie explicita
(vezi pointerlavoid).
Octetiirezervatide"calloc()"suntautomatinitializaticu0,pe
candceirezervaticu"malloc()"nusuntinitializati.
8 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
9/18
Alocarea dinamica a memoriei#include
#include
{int *a, i, n, suma = 0;
printf("\n%s", "Dati numarul de elemente ale sirului: ");
scanf("%d", &n);
a = (int *)calloc(n, sizeof(int)); /*aloca spatiu pentru n intregi*/
for (i = 0; i < n; ++i)
scanf("%d", &a[i]);
for (i = 0; i < n; ++i)
suma += a[i];
* *
printf("\n%s%7d\n%s%7d\n\n", "Numarul de elemente: ", n, "Sumaelementelor : ", suma);
}
9 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
10/18
-
7/31/2019 Limbaj de programare C11
11/18
Siruri de caractere si ointeri Uncaracterdintrunsirdecaracterea poatefiaccesat
folosindindexulsirului a[i],deexem lu saufolosind
pointerilacaracter.
Princonventie,unsirdecaractereseterminaprinmarcatorul
\0,saucaracterulnul.Deexemplu,sirul"abc"estememora pe carac ere,u mu n . ec
numaruldeelementealsiruluieste3,iardimensiunea4.
11 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
12/18
Siruri de caractere si ointericharw[100];
Initializarea(citirea)unuisirsepoatefaceinmaimultemoduri:
1. Initializareafiecaruielementcucateuncaracter:
w[0]='A';
w[1]='B';
w[2]='C';
w[3]='\0';
12 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
13/18
Siruri de caractere si ointeri2. Folosindfunctia"scanf()":
" "
Formatul"%s" estefolositpentrucitireaunuisirdecaractere.Distingemtreipasi:
pozitionarepeprimulcaracteralsirului;
secitesctoatecaracterelediferitedesiseintroducin"w"; citireasefacepanacandintalnimEOF;acumseplaseazalasfarsitul
sirului'\0'.
bazaasirului,expresia"w"esteechivalentacu"&w[0]".
13 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
14/18
-
7/31/2019 Limbaj de programare C11
15/18
-
7/31/2019 Limbaj de programare C11
16/18
Biblioteca standard intstrcmp(constchar*s1,constchar*s2);
Sunttrimisedouasiruridecaracteresisereturneazaunintre
careestemaimicstrict,egalsaumaimarestrictdecat0dupacumeste"s1"fatade"s2"(lexicografic) , Sirul"s2"estecopiatin"s1"panacandseintalneste'\0'.Ceea
cese asestein"s1"sesu rascrie.Se resu uneca"s1"aresuficientspatiupentrupastrarearezultatului.
unsignedstrlen(constchar*s); umaru ecaractere na ntea u .
16 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
17/18
Biblioteca standard AcestefunctiisuntscriseinCsisuntfoartescurte.Variabilele
dinelesuntdeobiceideclarate"register"pentruaface.
Deexemplu:
unsigned strlen(const char *s)
{reg s er n n = ;
for ( ; *s != '\0'; ++s)
++n;
return n;
}
17 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C11
18/18
Biblioteca standard
char s[14];
strc s "Ce mai faci ?\n"
18 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]