35
Složeni tipovi Složeni tipovi podataka podataka – II dio II dio Složeni tipovi ? Složeni tipovi ? Pored dosad proučavanih (skalari, brojni Pored dosad proučavanih (skalari, brojni nizovi i matrice) C dodatno raspolaže nizovi i matrice) C dodatno raspolaže sledećim tipovima podataka: sledećim tipovima podataka: Stringovi Stringovi Stringovi Stringovi Znakovi Znakovi Strukture Strukture Unije Unije Korisni Korisnički tipovi čki tipovi Pokazivači na strukture Pokazivači na strukture Povezivanje struktura Povezivanje struktura Strukture i funkcije Strukture i funkcije

Složeni tipovi Složeni tipovi podatakapodataka––II dioII dioapeg.ac.me/nastava/Predavanje_7.pdfSloženi tipovi Složeni tipovi podatakapodataka––II dioII dio Složeni tipovi

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

  • Složeni tipovi Složeni tipovi podatakapodataka –– II dioII dio

    Složeni tipovi ?Složeni tipovi ?

    Pored dosad proučavanih (skalari, brojni Pored dosad proučavanih (skalari, brojni

    nizovi i matrice) C dodatno raspolaže nizovi i matrice) C dodatno raspolaže

    sledećim tipovima podataka: sledećim tipovima podataka:

    StringoviStringoviStringoviStringovi

    ZnakoviZnakovi

    StruktureStrukture

    UnijeUnije

    KorisniKorisnički tipovički tipovi

    Pokazivači na strukturePokazivači na strukture

    Povezivanje strukturaPovezivanje struktura

    Strukture i funkcije Strukture i funkcije

  • StringoviStringoviSTRING?STRING?

    Stringovi Stringovi

    String je jednodimenzionalni znakovni niz String je jednodimenzionalni znakovni niz

    To je niz znakova koji završava nulTo je niz znakova koji završava nul--znakom (znak čiji je kod 0)znakom (znak čiji je kod 0) ’’\\0’0’

    Deklaracija stringa:Deklaracija stringa:

    char ime[duzina] = ”string” ;char ime[duzina] = ”string” ;char ime[duzina] = ”string” ;char ime[duzina] = ”string” ;

    iliilichar ime[duzina] = { znak, znak, … , znak } ;char ime[duzina] = { znak, znak, … , znak } ;

    Primjer:Primjer:char grad1[] = ”PODGORICA” ;char grad1[] = ”PODGORICA” ;

    char grad2[] = { ’B’,’E’,’R’,’A’,’N’,’E’,’char grad2[] = { ’B’,’E’,’R’,’A’,’N’,’E’,’\\0’ };0’ };

    OOznačavanje znakovnih i string konstanti:značavanje znakovnih i string konstanti:

    ’D’’D’ –– ovo je znak ovo je znak DD

    ””DD” ” –– ovo je string ovo je string ’D’’D’,,’’\\0’0’

  • StringoviStringoviSTRING?STRING?

    Manipulacija stringomManipulacija stringomIspisivanje stringaIspisivanje stringa

    ispisivanje pomoću funkcije ispisivanje pomoću funkcije

    printf(printf(”%s”, string); ”%s”, string);

    ispisivanje pomoću funkcije ispisivanje pomoću funkcije

    putsputs((string); string);

    PrimjerPrimjer:: PrimjerPrimjer::

    #include #include

    main()main()

    {{

    charchar grad[]= grad[]= ””PODGORICAPODGORICA”;”;

    printfprintf(”%s(”%s\\n”, grad);n”, grad);

    }}

    #include #include

    main()main()

    {{

    charchar grad[]= grad[]= ””PODGORICAPODGORICA”;”;

    puts(grad);puts(grad);

    }}

    PODGORICA PODGORICA

  • StringoviStringoviSTRING?STRING?

    Manipulacija stringomManipulacija stringomUUččitavanjeitavanje stringastringa

    učitavanje pomoću funkcije učitavanje pomoću funkcije

    scanf(scanf(”%s”, string); ”%s”, string);

    učitavanje pomoću funkcije učitavanje pomoću funkcije

    getgetss((string); string);

    PrimjerPrimjer::

    #include #include

    PrimjerPrimjer::

    #include #include

    main()main()

    {{

    charchar teksttekst[[5050];];

    printfprintf(”(”Unesi recenicu:Unesi recenicu:\\n”);n”);

    scanfscanf(”(”%s%s””,, teksttekst););

    printf(printf(”%s”, ”%s”, teksttekst););

    }}

    #include #include

    main()main()

    {{

    charchar teksttekst[[5050];];

    printfprintf(”(”Unesi recenicu:Unesi recenicu:\\n”);n”);

    getgetss((teksttekst););

    printf(printf(”%s”, ”%s”, teksttekst););

    }}

    Unesi recenicu:

    NOVI SAD

    NOVI

    Unesi recenicu:

    NOVI SAD

    NOVI SAD

  • StringoviStringoviSTRING?STRING?

    Primjer:Primjer: Program koji uProgram koji učitava string, a zatim ispisuje njegovu dužinu.čitava string, a zatim ispisuje njegovu dužinu.

    #include #include

    int strlen ( char *s )int strlen ( char *s )

    {{

    int i;int i;

    for (i=0; *s!=for (i=0; *s!=’’\\0’0’;; i++)i++);;for (i=0; *s!=for (i=0; *s!=’’\\0’0’;; i++)i++);;

    return(i)return(i);;

    }}

    main()main()

    {{

    char grad[]=”PODGORICA”;char grad[]=”PODGORICA”;

    pprintf(”rintf(”Broj slovaBroj slova: %d: %d”,”,

    strlen(grad) strlen(grad) ););

    }}

    Broj slova: 9

  • StringoviStringoviSTRING?STRING?

    Primjer:Primjer: Program koji uProgram koji učitava stringčitava string i pravi kopiju tog stringai pravi kopiju tog stringa..

    #include #include

    voidvoid strstrcopycopy ( char *s( char *s1, char *s21, char *s2 ))

    {{

    while ( *s2++ = *s1++ );while ( *s2++ = *s1++ );

    }}

    main()main()

    {{

    char original[100]=”PODGORICA”;char original[100]=”PODGORICA”;

    char kopija[100];char kopija[100];

    strcopy(original, kopija);strcopy(original, kopija);

    printf(”%sprintf(”%s\\n”, original);n”, original);

    printf(”%sprintf(”%s\\n”, kopija);n”, kopija);

    }}

    PODGORICA

    PODGORICA

  • StringoviStringovi((bibliotekabiblioteka: : string.hstring.h))

    strlen() - određivanje dužine stringa bez znaka null na krajustrcmp() - poređenje kompletnih sadržaja dva stringastrncmp() - poređenje djelova sadržaja dva stringastrncmp() - poređenje djelova sadržaja dva stringastrcpy() - kopiranje jednog stringa u drugi, od početka drugogstrncpy() - kopiranje dijela jednog stringa u drugi, od početka drugogstrcat() - kopiranje jednog stringa u drugi, u produžetku sadržaja drugogstrncat() - kopiranje dela jednog stringa u drugi, u produžetku sadržaja

    drugog

  • StringoviStringovi((biblioteka: string.h)biblioteka: string.h)

    char rec1[ ] = "abc";char rec2[ ] = "abc";char rec3[ ] = "aeo";

    printf("%s\n", strcmp(rec1, rec2)? "razliciti":"isti"); istiprintf("%s\n", strcmp(rec1, rec3)? "razliciti":"isti"); razlicitiprintf("%s\n", strcmp(rec2, rec3)? "razliciti":"isti"); razliciti

    char rec3[ ] = "aeo";

  • StringoviStringovi

    (biblioteka: string.h)(biblioteka: string.h)

    // KOPIRANJE STRINGA

    #include

    #include

    int main(void)

    {

    char bafer[6];

    char rec[ ] = "abc";

    strcpy(bafer, rec);

    puts(bafer);

    getchar();

    return(0);

    }

  • StringoviStringovi

    // KOPIRANJE STRINGA

    #include

    #include

    int main(void)

    (biblioteka: string.h)(biblioteka: string.h)

    {

    char bafer[6];

    char rec[ ] = "abc";

    strcpy(bafer, rec);

    puts(bafer);

    getchar();

    return(0);

    }

  • StringoviStringovibiblioteka: stdlib.h)biblioteka: stdlib.h)(biblioteka: string.h)(biblioteka: string.h)

    � atoi() za konverziju stringa u ceo broj, ako je to moguće� atof() za konverziju stringa u realan broj, ako je to moguće

    //PRIMJER atof()#include #include #include

    int main(void){char tekst1[ ] = " 2.5";char tekst2[ ] = "0005";char tekst3[ ] = "10.25 i neki tekst";char tekst4[ ] = "5e+2";char tekst5[ ] = "neki tekst 200.30";printf("\nbroj: %f", atof(tekst1)); //2.500000printf("\nbroj: %f", atof(tekst2)); //5.000000printf("\nbroj: %f", atof(tekst3)); //10.250000printf("\nbroj: %f", atof(tekst4)); //500.000000printf("\nbroj: %f", atof(tekst5)); //0.000000getchar();return(0);}

  • ZnakoviZnakoviznakoviznakovi

    Znak potreban programu može biti: slovo, cifra, ostali...

    • Tip promenljive za čuvanje znaka – samo jedan: char• Svaki znak je kodiran u ASCII tabeli – pomoću broja• Nema posebnih operatora za znakove!

  • ZnakoviZnakovi

    ASCII ASCII TABELATABELA

  • ZnakoviZnakovi

    • UPRAVLJAČKI (NEKI)

    • 13, Povratak na početak reda, '\r'

    • 12, Prelaz na novu stranu, '\f'

    • 11, Vertikalni pomeraj, '\v'• 11, Vertikalni pomeraj, '\v'

    • 10, Prelaz u nov red, '\n'

    • 9, Horizontalni pomeraj, '\t'

    • 8, Povratak za jedno mesto, '\b‘

    • 7, Zvono

  • ZnakoviZnakovi

    • Prepoznavanje slova ili cifre u znaku

    Prostor u mem.

  • StruktureStruktureSTRUKTURASTRUKTURA??

    StruktureStruktureStruktura je skup heterogenih podataka meStruktura je skup heterogenih podataka međusobno logički povezanihđusobno logički povezanih

    Pogodna za grupisanje atributa nekog entiteta (stvarnog ili nestvarnog)Pogodna za grupisanje atributa nekog entiteta (stvarnog ili nestvarnog)

    Atributi?Atributi?Atributi?Atributi?

    prezimevisina

    ime

    struct osoba struct osoba {{

    char prezime[15];char prezime[15];

    char ime[15];char ime[15];

    int visina;int visina;

    }}

  • StruktureStruktureSTRUKTURASTRUKTURA??

    Deklaracija struktureDeklaracija strukture

    OpOpšti oblik deklaracije:šti oblik deklaracije:

    struct ime struct ime {{

    tip1tip1 element1element1;;

    tip2tip2 element2element2;;tip2tip2 element2element2;;

    ......

    tipNtipN elementNelementN;;

    }} lista_promjenljivih;lista_promjenljivih;

    ključna riječ

    ime strukture

    Deklaracija

    elementa (polja)

    lista promjenljivih

    ovog tipaPrimjer:Primjer:

    struct osoba struct osoba {{

    char prezime[15];char prezime[15];

    char ime[15];char ime[15];

    int visina;int visina;

    }} student1, student2, student1, student2, klub[100];klub[100];

  • StruktureStruktureSTRUKTURASTRUKTURA??

    Pristup elementima (poljima) strukturePristup elementima (poljima) strukture

    Pristup pomoPristup pomoću operatoraću operatora

    ”.” = ELEMENT STRUKTURE ”.” = ELEMENT STRUKTURE

    Primjer:Primjer:

    struct osoba struct osoba {{struct osoba struct osoba {{

    char prezime[15];char prezime[15];

    char ime[15];char ime[15];

    int visina;int visina;

    }} student, student, klub[100];klub[100];

    Pristup poljima:Pristup poljima:

    student.prezimestudent.prezime = ”Markovic”; = ”Markovic”; klubklub[1][1].prezime.prezime = ”Jankovic”;= ”Jankovic”;

    student.imestudent.ime = ”Marko”;= ”Marko”; klubklub[1][1]..ime = ”Janko”;ime = ”Janko”;

    student.visinastudent.visina = 190;= 190; klubklub[1][1]..visina = 202;visina = 202;

  • StruktureStruktureSTRUKTURASTRUKTURA??

    Primjer: Primjer: Ilustracija strukturaIlustracija struktura

    #include #include #include #include

    struct struct evid evid {{char prezime[50];char prezime[50];char ime[50];char ime[50];int maticni;int maticni;

    } trazena = {"Stojanovic","Radovan",234}, osoba;} trazena = {"Stojanovic","Radovan",234}, osoba;} trazena = {"Stojanovic","Radovan",234}, osoba;} trazena = {"Stojanovic","Radovan",234}, osoba;

    int main()int main(){{int a,b,c;int a,b,c;printf("Upisi Prezime Ime osobe i maticni broj ");printf("Upisi Prezime Ime osobe i maticni broj ");scanf("%s %s %d", osoba.prezime, osoba.ime, &osoba.maticni);scanf("%s %s %d", osoba.prezime, osoba.ime, &osoba.maticni);//printf("%s %s %d",osoba.prezime, osoba.ime, osoba.maticni);//printf("%s %s %d",osoba.prezime, osoba.ime, osoba.maticni);a=strcmp(osoba.prezime, trazena.prezime);a=strcmp(osoba.prezime, trazena.prezime);b=strcmp(osoba.ime, trazena.ime);b=strcmp(osoba.ime, trazena.ime);if((!a && !b)&&(osoba.maticni=trazena.maticni))if((!a && !b)&&(osoba.maticni=trazena.maticni))printf("WANTED");printf("WANTED");elseelseprintf("PASS");printf("PASS");getchar();getchar();getchar();}getchar();}

  • UnijeUnijeUNIJAUNIJA??

    UnijeUnijeUnija je skup Unija je skup podataka različitih tipova smještenih u istom memorijskom prostoru.podataka različitih tipova smještenih u istom memorijskom prostoru.

    Podaci u uniji nisu međusobno nezavisni, jer koriste isti memorijski prostor.Podaci u uniji nisu međusobno nezavisni, jer koriste isti memorijski prostor.

    Promjena jednog podatka može dovesti i do promjene drugog podatka u uniji.Promjena jednog podatka može dovesti i do promjene drugog podatka u uniji.Promjena jednog podatka može dovesti i do promjene drugog podatka u uniji.Promjena jednog podatka može dovesti i do promjene drugog podatka u uniji.

    Unija zauzima u memoriji onoliko bajtova koliko je potrebno za memorisanje Unija zauzima u memoriji onoliko bajtova koliko je potrebno za memorisanje

    najvećeg podatka u unijinajvećeg podatka u uniji

    MEMORIJA

    Podatak1Podatak1

    (2 bajta)(2 bajta)

    Podatak2Podatak2

    (1 bajt)(1 bajt)

    Zajednička oblast

    za podatak1 i za podatak2 Unija zauzima

    ukupno 2 bajta

  • UnijeUnije

    UNIJAUNIJA??

    Deklaracija Deklaracija unijeunijeOpOpšti oblik deklaracije:šti oblik deklaracije:

    union ime union ime {{

    tip1tip1 element1element1;;

    tip2tip2 element2element2;;tip2tip2 element2element2;;

    ......

    tipNtipN elementNelementN;;

    }} lista_promjenljivih;lista_promjenljivih;

    ključna riječ

    ime unije

    Deklaracija

    elementa (polja)

    lista promjenljivih

    ovog tipaPrimjer:Primjer:

    union unija union unija {{

    char char c;c;

    intint ii;;

    }} x; x;

  • UnijeUnije

    UNIJAUNIJA??

    Deklaracija Deklaracija unijeunijeAlternativniAlternativni oblik deklaracije:oblik deklaracije:

    union ime union ime {{

    tip1tip1 element1element1;;

    tip2tip2 element2element2;;

    Primjer:Primjer:

    union unija union unija {{

    char char cc;;

    int iint i;;tip2tip2 element2element2;;

    ......

    tipNtipN elementNelementN;;

    }};;

    unionunion ime lista_prom;ime lista_prom;

    int iint i;;

    floatfloat ff;;

    };};

    unionunion unija xunija x;;

    Pristup elementima (poljima) unijePristup elementima (poljima) unijexx..i = 100;i = 100;

    x.c = ’A’;x.c = ’A’;

  • UnijeUnije

    UNIJAUNIJA??

    Primjer:Primjer:

    #include #include

    union unija union unija {{

    char char cc;;

    4141

    0101x.ix.i

    x.cx.c

    char char cc;;

    int iint i;;

    };};

    main()main()

    {{

    union unija xunion unija x;;

    x.i = 0x141;x.i = 0x141;

    printf(”printf(”x.i = %dx.i = %d\\n”, x.i);n”, x.i);

    printf(”printf(”x.x.cc = %= %cc\\n”, x.c);n”, x.c);

    }}

    MEMORIJA

    x.i = 321

    x.c = A

  • Korisnički tipoviKorisnički tipovi

    Kako definisati vlastiti tipKako definisati vlastiti tip??

    Definisanje korisniDefinisanje korisniččkihkih tipovatipovaC omogućava:C omogućava:

    definisanje korisničkih tipovadefinisanje korisničkih tipova

    promjenu imena postojećim tipovimapromjenu imena postojećim tipovima

    Opšti oblik:Opšti oblik:

    typedef staritip novitip;typedef staritip novitip;

    Primjeri:Primjeri:

    typedef int INTEGER;typedef int INTEGER;

    INTEGER i,j;INTEGER i,j;

    ----------------------------------------------

    typedef float NIZtypedef float NIZ[100][100];;

    NIZ niz1, niz2;NIZ niz1, niz2;

    ----------------------------------------------

    typedef typedef struct {struct {

    int i;int i;

    char c;char c;

    }} TIPTIP;;

    TIP niz[10];TIP niz[10];

  • PokazivačiPokazivači na strukturena strukture

    POINTER NA POINTER NA

    STRUKTURU?STRUKTURU?

    Pokazivači na strukturePokazivači na strukture

    Neka imamo strukturuNeka imamo strukturu

    struct datum struct datum { {

    Tada moTada možežemo da mo da definišemo:definišemo:

    struct datum struct datum rodjen,rodjen, *pokaz *pokaz ;;

    struct datum struct datum { {

    int dan;int dan;

    int mjesec;int mjesec;

    int godina;int godina;

    };};

    Pokazivač na strukturu datum

    (još uvijek ne pokazuje

    nikakav konkretan podatak)

    Ako želimo da Ako želimo da pokazpokaz pokazuje pokazuje rodjenrodjen: :

    *pokaz = &rodjen ;*pokaz = &rodjen ;

    pokaz sada pokazuje na

    promjenljivu rodjen (sadrži

    adresu promjenljive rodjen)

  • PokazivačiPokazivači na strukturena strukturePOINTER NA POINTER NA

    STRUKTURU?STRUKTURU?

    Pristup elementima strukturePristup elementima strukture

    Neka imamoNeka imamo

    struct datum struct datum { {

    intint dandan;;

    intint mjesecmjesec;;

    intint godinagodina;;

    }} rodjenrodjen, , *pokaz = &rodjen ;*pokaz = &rodjen ;

    Pristup elementima strukture:Pristup elementima strukture:

    rodjen.dan = 1;rodjen.dan = 1;

    rodjen.mjesec = 4;rodjen.mjesec = 4;

    rodjen.godina = 1985;rodjen.godina = 1985;

    Pristup elementima strukture preko pokazivača:Pristup elementima strukture preko pokazivača:

    (*pokaz).dan = 1;(*pokaz).dan = 1;

    (*pokaz).mjesec = 4;(*pokaz).mjesec = 4;

    (*pokaz).godina = 1985;(*pokaz).godina = 1985;

    iliilipokazpokaz-->dan = 1;>dan = 1;

    pokazpokaz-->mjesec = 4;>mjesec = 4;

    pokazpokaz-->godina = 1985;>godina = 1985;

  • PokazivačiPokazivači na strukturena strukture

    POINTER NA POINTER NA

    STRUKTURU?STRUKTURU?

    Pristup elementima strukturePristup elementima strukture

    Primjer:Primjer:

    #include #include

    main()main()

    {{

    Obartiti pažnju

    na pridruživanje

    {{

    struct datum struct datum { int dan{ int dan, , mjesecmjesec, , godina;godina; }}; ;

    struct datum r, *p = &r;struct datum r, *p = &r;

    pp-->dan = 1;>dan = 1;

    pp-->mjesec = 4;>mjesec = 4;

    pp-->godina = 1985;>godina = 1985;

    printf(”Datum: %02d.%02d.%d.printf(”Datum: %02d.%02d.%d.”,”, r.dan, r.mjesec,r.godinar.dan, r.mjesec,r.godina););

    }}

    Datum: 01.04.1985.

  • PokazivačiPokazivači na strukturena strukturePOINTER U POINTER U

    STRUKTURI?STRUKTURI?

    Pokazivač u strukturiPokazivač u strukturiPokazivač može da bude element strukturePokazivač može da bude element strukture

    struct primjer struct primjer { int { int *p1, *p2*p1, *p2;; }} clan;clan;

    Pristup pokazivaču u strukturiPristup pokazivaču u strukturi

    *clan.p1 *clan.p1 odnosnoodnosno *clan.p2*clan.p2

    x=2 y=5

    Primjer:Primjer:

    #include #include

    main()main()

    {{

    int x,y;int x,y;

    struct primjer struct primjer { int { int *p1, *p2*p1, *p2;; }};;

    struct primjer proba, *pok = &proba;struct primjer proba, *pok = &proba;

    proba.p1 = &x; *proba.p1 = 2;proba.p1 = &x; *proba.p1 = 2;

    pokpok-->p2 = &y; *pok>p2 = &y; *pok-->p2 = 5;>p2 = 5;

    printf(”x=%d y=%dprintf(”x=%d y=%d”,”, x,yx,y););

    }}

  • PokazivačiPokazivači na strukturena strukture

    POVEZANE POVEZANE

    STRUKTURE?STRUKTURE?

    Povezane strukturePovezane strukture

    Kombinovanjem pokazivača na strukturu i strukture sa pokazivačem Kombinovanjem pokazivača na strukturu i strukture sa pokazivačem

    možemo da dobijemo možemo da dobijemo strukturu sa pokazivačem na istu strukturustrukturu sa pokazivačem na istu strukturu tj. tj.

    imamo imamo povezane strukturepovezane strukture

    struct element struct element { { informaciono

    struct element struct element { {

    tiptip infoinfo;;

    struct element *next;struct element *next;

    }} prvi, drugi;prvi, drugi;

    pokazivač na istu strukturu

    (omogućava povezivanje struktura i

    pravljenje liste – dinamičkog niza)

    informaciono

    polje u strukturi

    prviprvi

    Aprvi.next = &drugiprvi.next = &drugi

    prviprvi..infoinfo prviprvi..nextnext

    drugidrugi

    B

    drugidrugi..infoinfo drugidrugi..nextnext

  • Povezivanje strukturaPovezivanje struktura

    POVEZANE POVEZANE

    STRUKTURE?STRUKTURE?

    Linearna jednostruko povezana listaLinearna jednostruko povezana lista

    00glavaglava

    linklinkinfoinfo linklinkinfoinfo

    struct element struct element { {

    tiptip infoinfo;;

    struct element *link;struct element *link;

    }} *glava;*glava;

    Linearna dvostruko povezana listaLinearna dvostruko povezana lista

    glavaglava

    DDinfoinfoLL

    reprep00 00

  • Povezivanje strukturaPovezivanje struktura

    POVEZANE POVEZANE

    STRUKTURE?STRUKTURE?

    Binarno stabloBinarno stabločvor

    korijenkorijen

    infoinfo

    LL DD

    Lijevo

    podstablo

    0 0Desno

    podstablo

    0

    0 0 0 0

  • StruktureStrukture ii funkcijefunkcije

    Argument funkcije može biti:

    � struktura – po vrijednosti

    � pokazivač na strukturu – po referenci� pokazivač na strukturu – po referenci

    Povratna vrijednost od funkcije može biti:

    � struktura

    � pokazivač na strukturu

  • StruktureStrukture ii funkcijefunkcije

    Struktura- argument

    funkcije

    struct adresa{char ime_ulice[31];int broj_ulaza; };void stampa(struct adresa x);

    Deklaracija funkcije čiji

    je argument struktura

    Struktura se može predati funkciji kao argument, a funkcija može vratiti strukturu onome ko ju je pozvao. Predajom strukture kao argumenta u funkciju se prenose kopije svakog njenog elementa tj. vrši se prenos po vrijednosti.

    void stampa(struct adresa x);main(){struct adresa a1={“Ime”, 1};stampa(a1);}void stampa(struct adresa x){printf(“%s ”, x.ime_ulice);printf(“%d ”, x.broj_ulaza}

    je argument struktura

    Pri pozivu funkcije

    po vrijednosti strukture

    formalna struktura x

    dobija sadržaj stvarne

    strukture a1

  • StruktureStrukture ii funkcijefunkcijePokazivač na niz struktura – argument

    funkcije

    struct adresa{char ime_ulice[31];int broj_ulaza; };void stampa(struct adresa niz[ ], int n);main()main(){ struct adresa spisak[ ] = {“Ime1”, 1, “Ime2”, 2, “Ime3”, 3};stampa(spisak, 3);}void stampa(struct adresa niz[ ], int n){ int i;for(i=0; i

  • StruktureStrukture ii funkcijefunkcijeStruktura rezultat od funkcije

    struct adresa{char ime_ulice[31];int broj_ulaza; };struct adresa izmena(struct adresa x);main()main(){ struct adresa a1 = {“Ime1”, 1}, a2;a2 = izmena(a1);printf("%s %d ", a2.ime_ulice, a2.broj_ulaza);}struct adresa izmena(struct adresa x){ struct adresa y;strcpy(y.ime_ulice,x.ime_ulice);puts(“Novi broj ulaza”); scanf(“%d”, &y.broj_ulaza);return y;} Prima strukturu a1 preko strukture x, kopira x u

    strukturu y, vraca y, struktura a2 poprime vrijednost y.