Limbaj de programare C11

download Limbaj de programare C11

of 18

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]