op - t08 - pointeri
DESCRIPTION
Pointeri u programskom jeziku CTRANSCRIPT
-
OSNOVOSNOVI I PROGRAMIRANJAPROGRAMIRANJA( VIII )( VIII )
POINTERIPOINTERI
mr Draen BraninElektrotehniki fakultet Banja Luka
2007.
-
288..11.. DefinicijaDefinicija ppokazivaokazivaaa
POINTERI?POINTERI?
PokazivaPokazivai (Pointeri)i (Pointeri)PokazivaPokazivai obezbjeuju indirektan pristup memoriji i obezbjeuju indirektan pristup memoriji (putem adrese)(putem adrese)PokazivaPokaziva je promjenljiva koja sadrje promjenljiva koja sadri memorijsku adresu nekog objektai memorijsku adresu nekog objekta
ako je u pitanju polje ako je u pitanju polje tada je to adresa potada je to adresa poetnog elementa poljaetnog elementa poljaako je u pitanju funkcija ako je u pitanju funkcija tada je to adresa potada je to adresa poetka funkcijeetka funkcije
Ako promjenljiva p sadrAko promjenljiva p sadri adresu objekta q, kai adresu objekta q, kaemo da p pokazuje na qemo da p pokazuje na qPrimjer: Primjer:
MEMORIJA
adresaadresa1011011001009999
qq 6565
Deklaracija pokazivaDeklaracija pokazivaa:a:tip *ime;tip *ime;
Primjer:Primjer:int *pi;int *pi;char *pc, *tekst;char *pc, *tekst;
100100pp
-
388..22.. OperatoriOperatori zaza radrad sasa ppokazivaokazivaiimama
OPERATORIOPERATORI??
Operatori za rad sa pokazivaOperatori za rad sa pokazivaimaimaAdresni operatorAdresni operator &&daje adresu nekog objekta u daje adresu nekog objekta u memorijimemorijiAko je q neka promjenljiva tada Ako je q neka promjenljiva tada &q&qdaje adresu te promjenljivedaje adresu te promjenljiveAko Ako elimo da pokazivaelimo da pokaziva p pokazuje p pokazuje na promjenljivu q imamo na promjenljivu q imamo p=&qp=&q
MEMORIJA
adresaadresa1011011001009999
qq 6565
Operator indirekcijeOperator indirekcije **omoguomoguava indirektan pristup promjenljivoj ava indirektan pristup promjenljivoj koristekoristei pokazivai pokaziva na tu promjenljivuna tu promjenljivuAko je s neka promjenljiva, a p pokazivaAko je s neka promjenljiva, a p pokaziva na na isti tip, tada se moisti tip, tada se moe pisati e pisati s=*ps=*p ..To znaTo znai da i da e q dobiti vrijednost koja se e q dobiti vrijednost koja se nalazi na lokaciji koju pokazuje pnalazi na lokaciji koju pokazuje p
MEMORIJA
adresaadresa1011011001009999
qq 6565
100100ppp=&qp=&q 100100ppp=&q
p=&q
6565sss=*ps=*p
-
488..22.. OperatoriOperatori zaza radrad sasa ppokazivaokazivaiimama
OPERATORIOPERATORI??
Operatori za rad sa pokazivaOperatori za rad sa pokazivaimaimaAdresni operatorAdresni operator & & i i operator indirekcijeoperator indirekcije * * su INVERZNIsu INVERZNI OPERATORIOPERATORI
y = *& xy = *& x iliili y = xy = xiliili
int x,y,*z;int x,y,*z;z = &x;z = &x;y = *z;y = *z;
y = *z = *&x = xy = *z = *&x = x
PrimjerPrimjer::#include #include main()main(){{
int x, prom=5, *pokaz;int x, prom=5, *pokaz;pokaz = &prom;pokaz = &prom;x = *pokaz;x = *pokaz;printf(printf(prom=%dprom=%d\\nnx=%dx=%d\\nn,,prom,xprom,x););
}}
prom=5x=5
-
588..33.. PPokazivaokazivaii i i strukturestrukturePOINTER NA POINTER NA
STRUKTURU?STRUKTURU?
PokazivaPokazivai na strukturei na struktureNeka imamo strukturuNeka imamo strukturu
struct datum struct datum { { intint dandan;;intint mjesecmjesec;;intint godinagodina;;
};};
Tada moTada moeemo mo dada definidefiniemo:emo:struct datum struct datum rodjen,rodjen, *pokaz *pokaz ;;
Pokaziva na strukturu datum(jo uvijek ne pokazuje
nikakav konkretan podatak)
Ako Ako elimo da elimo da pokazpokaz pokazuje pokazuje rodjenrodjen: : *pokaz = &rodjen ;*pokaz = &rodjen ;
pokaz sada pokazuje na promjenljivu rodjen (sadri adresu promjenljive rodjen)
-
688..33.. PPokazivaokazivaii i i strukturestrukturePOINTER NA POINTER NA
STRUKTURU?STRUKTURU?
Pristup elementima strukturePristup elementima struktureNeka 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 pokazivaPristup elementima strukture preko pokazivaa: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;
-
788..33.. PPokazivaokazivaii i i strukturestrukturePOINTER NA POINTER NA
STRUKTURU?STRUKTURU?
Pristup elementima strukturePristup elementima strukturePrimjerPrimjer::#include #include main()main(){{
struct datum struct datum { { intint dandan, , mjesecmjesec, , godinagodina;; }}; ; 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(printf(Datum: %02d.%02d.%d.Datum: %02d.%02d.%d.,, r.dan, r.mjesec, r.godinar.dan, r.mjesec, r.godina););
}}Datum: 01.04.1985.
-
888..33.. PPokazivaokazivaii i i strukturestrukturePOINTER U POINTER U
STRUKTURI?STRUKTURI?
PokazivaPokaziva u strukturiu strukturi
x=2 y=5
PokazivaPokaziva momoe da bude element strukturee da bude element strukturestruct primjer struct primjer { { intint *p1, *p2*p1, *p2;; }} clan;clan;
Pristup pokazivaPristup pokazivau u strukturiu u strukturi*clan.p1 *clan.p1 odnosnoodnosno *clan.p2*clan.p2
PrimjerPrimjer::#include #include main()main(){{
int x,y;int x,y;struct primjer struct primjer { { intint *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(printf(x=%d y=%dx=%d y=%d,, x,yx,y););
}}
-
988..33.. PPokazivaokazivaii i i strukturestrukturePOVEZANE POVEZANE
STRUKTURE?STRUKTURE?
Povezane strukturePovezane struktureKombinovanjem pokazivaKombinovanjem pokazivaa na strukturu i strukture sa pokazivaa na strukturu i strukture sa pokazivaem em momoemo da dobijemo emo da dobijemo strukturu sa pokazivastrukturu sa pokazivaem na istu strukturuem na istu strukturu tj. tj. imamo imamo povezane strukturepovezane strukture
struct element struct element { { tiptip infoinfo;;struct element *next;struct element *next;
}} prvi, drugi;prvi, drugi;pokaziva na istu strukturu
(omoguava povezivanje struktura i pravljenje liste dinamikog niza)
informaciono polje u strukturi
prviprviA prvi.next = &drugiprvi.next = &drugi
prviprvi..infoinfo prviprvi..nextnext
drugidrugiB
drugidrugi..infoinfo drugidrugi..nextnext
-
10
88..33.. PPokazivaokazivaii i i strukturestrukturePOVEZANE POVEZANE
STRUKTURE?STRUKTURE?
Linearna jednostruko povezana listaLinearna jednostruko povezana lista
00glavaglava
linklinkinfoinfostruct element struct element { {
tiptip infoinfo;;struct element *link;struct element *link;
}} *glava;*glava;
Linearna dvostruko povezana listaLinearna dvostruko povezana lista
glavaglava
DDinfoinfoLL
reprep00 00
-
11
88..33.. PPokazivaokazivaii i i strukturestrukturePOVEZANE POVEZANE
STRUKTURE?STRUKTURE?
Binarno stabloBinarno stablovor
korijenkorijen
LL DD
infoinfo
Lijevo podstablo
0 0Desno
podstablo
0
0 0 0 0
-
12
88..44.. PPokazivaokazivaii i i poljapolja
POINTER NA POINTER NA POLJEPOLJE??
PokazivaPokaziva na vektor (jednodimenzionalno polje)na vektor (jednodimenzionalno polje)Ime vektora (niza) predstavlja adresu poIme vektora (niza) predstavlja adresu poetnog elementa vektora i veetnog elementa vektora i ve je je samo po sebi pokazivasamo po sebi pokaziva (stati(statiki pokazivaki pokaziva))
a[2]a[0] a[1]00 0 0
a[3]0a[4]
intint aa[5][5]=={0};{0};intint *p, *q; *p, *q;
p = a;p = a;iliili
p = &a[0];p = &a[0];q = a+3;q = a+3;
iliiliq = &a[3];q = &a[3];
Napomena:a je statika promjenljivaNije dozvoljeno a=a+2; ili a++;
Napomena:p je dinamika promjenljivaDozvoljeno je p=p+2; ili p++;
-
13
88..44.. PPokazivaokazivaii i i poljapolja
POINTER NA POINTER NA POLJEPOLJE??
PokazivaPokaziva na vektor (jednodimenzionalno polje)na vektor (jednodimenzionalno polje)PrimjerPrimjer::#include #include static int xstatic int x[5] = {1,2,3,4,5};[5] = {1,2,3,4,5};main()main(){{
int int *p*p;;p = x;p = x;printf(printf(%d %d%d %d %%dd\\nn,, x[0], x[1], x[2]);x[0], x[1], x[2]);printf(printf(%d %d%d %d %%dd\\nn,, *p, *(p+1), *(p+2) );*p, *(p+1), *(p+2) );
}}
1 2 31 2 3
-
14
88..44.. PPokazivaokazivaii i i poljapolja
POINTER NA POINTER NA POLJEPOLJE??
PrenosPrenos vektoravektora u u funkcijufunkciju ppoomomou pokazivau pokazivaaaPretpostavimo da imamo funkcijuPretpostavimo da imamo funkciju
int funkcija (niz, n)int funkcija (niz, n)int nizint niz[], n;[], n;{ ... }{ ... }
pristup elementima u nizuniz[indeks]
int funkcija (int funkcija (pp, n), n)int int *p, n;*p, n;{ ... }{ ... }
pristup pomou pointera*(p+indeks)
iliili
PrimjerPrimjer::int suma (int suma (intint nizniz[][], , intint n)n)
{{int int s=0, is=0, i;;for (i=0; i
-
15
88..44.. PPokazivaokazivaii i i poljapolja
POINTER NA POINTER NA POLJEPOLJE??
PokazivaPokaziva na na matricumatricu ((dvdvodimenzionalno polje)odimenzionalno polje)...0 1 j ... m-1
01
i
n-1
mat[i][j]
mat[0][0]
intint *p; *p;
p = mat;p = mat;iliili
p = &mat[0][0];p = &mat[0][0];*( mat + m*i + j )*( mat + m*i + j )
iliili*( &mat[0][0] + m*i + j )*( &mat[0][0] + m*i + j )
-
16
88..55.. AdresnaAdresna aritmetikaaritmetikaADRESNA ADRESNA
ARITMETIKAARITMETIKA??
AdresnaAdresna aritmetikaaritmetikaNekaNeka jeje::
a a vektorvektor sasa elementimaelementima tipatipa TTv v izrazizraz tipatipa TTn n cjelobrojnicjelobrojni izrazizrazp, p, qq pokazivapokazivai na tip T (pokazuju na elemente niza a)i na tip T (pokazuju na elemente niza a)
Tada vaTada vae sljedee sljedea pravila:a pravila:a a pokazivapokaziva na pona poetak nizaetak niza&a&a[0] [0] pokapokazzivaiva nana popoetak nizaetak niza*p *p element niza a na koji pokazuje pelement niza a na koji pokazuje p*p=v *p=v elementu na koji pokazuje p dodjeljuje vrijednost velementu na koji pokazuje p dodjeljuje vrijednost v++p ++p pokazuje na sljedepokazuje na sljedei element nizai element niza----p p pokazuje na prethodni element nizapokazuje na prethodni element niza*++p *++p inkrementira p, pa pristupa tom (sljedeinkrementira p, pa pristupa tom (sljedeem) elementuem) elementu*p++ *p++ -- pristupa elementu na koji pokazuje p, a zatim pokazujepristupa elementu na koji pokazuje p, a zatim pokazuje
na sljedena sljedei elementi elementp+n p+n -- pokazuje na npokazuje na n--ti naredni element nizati naredni element niza*(p+n)=v *(p+n)=v dodjeljuje vrijednost v ndodjeljuje vrijednost v n--tom narednom elementu u nizu utom narednom elementu u nizu u
odnosu na element na koji pokazuje podnosu na element na koji pokazuje pqq--p p -- odreuje broj elemenata niza smje odreuje broj elemenata niza smjetenih izmeu adresa natenih izmeu adresa na
koje pokazuju q i pkoje pokazuju q i p
-
17
88..55.. AdresnaAdresna aritmetikaaritmetikaADRESNA ADRESNA
ARITMETIKAARITMETIKA??
PrimjerPrimjer::#include #include main()main(){{static char cstatic char c[] = {[] = {aa,,bb,,cc,,dd};};static static intint i[] = { 1, 2, 3, 4};i[] = { 1, 2, 3, 4};charchar *pc1=&c[0], *pc2=&c[3]*pc1=&c[0], *pc2=&c[3];;intint *pi1=&i[0], *pi2=&i[3];*pi1=&i[0], *pi2=&i[3];printf(printf(*c=*c=%%cc *i=*i=%d%d\\nn,, *c, *i);*c, *i);printf(printf(*pc1=*pc1=%%cc *pi1=*pi1=%d%d\\nn,, *pc1, *pi1);*pc1, *pi1);printf(printf(*(pc1+1)=*(pc1+1)=%%cc *(pi1+2)=*(pi1+2)=%d%d\\nn,, *(pc1+1), *(pi1+2));*(pc1+1), *(pi1+2));printf(printf(*++pc1=*++pc1=%%cc *++pi1=*++pi1=%d%d\\nn,, *++pc1, *++pi1);*++pc1, *++pi1);printf(printf(*pc1++=*pc1++=%%cc *pi1++=*pi1++=%d%d\\nn,, *pc1++, *pi1++);*pc1++, *pi1++);printf(printf(*pc1=*pc1=%%cc *pi1=*pi1=%d%d\\nn,, *pc1, *pi1);*pc1, *pi1);pc1pc1--=2; pi1=2; pi1--=2;=2;printf(printf(*pc1=*pc1=%%cc *pi1=*pi1=%d%d\\nn,, *pc1, *pi1);*pc1, *pi1);printf(printf(pc2pc2--pc1=%dpc1=%d pi2pi2--pi1=pi1=%d%d\\nn,, pc2pc2--pc1, pi2pc1, pi2--pi1);pi1);
}}
*c=a *i=1*pc1=a *pi1=1*(pc1+1)=b *(pi1+2)=3*++pc1=b *++pi1=2*pc1++=b *pi1++=2*pc1=c *pi1=3*pc1=a *pi1=1pc2-pc1=3 pi2-pi1=3
-
18
88..66.. PrenosPrenos argumenataargumenata referisanjemreferisanjem
REFERISANJEREFERISANJE??
PrenosPrenos argumenataargumenata u u funkcijufunkciju referisanjemreferisanjemArgumentiArgumenti se u se u funkcijufunkciju standardnostandardno prenoseprenose putemputem vrijednostivrijednosti
Funkcija nema moguFunkcija nema mogunost da promijeni vrijednost stvarnog argumenta!!!nost da promijeni vrijednost stvarnog argumenta!!!
Da bi se omoguDa bi se omoguilo da funkcija mijenja vrijednost stvarnog argumenta:ilo da funkcija mijenja vrijednost stvarnog argumenta:1. Prilikom poziva funkcije treba slati adresu!1. Prilikom poziva funkcije treba slati adresu!2. Formalni argument treba definisati kao pokaziva2. Formalni argument treba definisati kao pokaziva na tip!na tip!3. U tijelu funkcije treba koristiti operator indirekcije!3. U tijelu funkcije treba koristiti operator indirekcije!
REFERISANJE = PRENOS ADRESE (REFERENCE) stvarnog argumentaREFERISANJE = PRENOS ADRESE (REFERENCE) stvarnog argumentaReferisanje omoguReferisanje omoguava da funkcija mijenja vrijednost stvarnog argumenta!ava da funkcija mijenja vrijednost stvarnog argumenta!
-
19
88..66.. PrenosPrenos argumenataargumenata referisanjemreferisanjem
REFERISANJE?REFERISANJE?
PrimjerPrimjer::#include #include void suma ( niz, n, s )void suma ( niz, n, s )
int *niz, n, *s;int *niz, n, *s;{{
int i;int i;*s = 0; *s = 0; for (i=0; i
-
20
88..77.. DinamiDinamika alokacija memorijeka alokacija memorije
DinamiDinamika alokacija?ka alokacija?
StatiStatika i dinamika i dinamika alokacija memorijeka alokacija memorijeStatiStatika alokacija memorijeka alokacija memorije
karakteristikarakteristino za polja (nizovi, matrice, ...)no za polja (nizovi, matrice, ...)prednost: prednost:
memorija se jednostavnije alocira i oslobaa memorija se jednostavnije alocira i oslobaa (za programera)(za programera)osnovni nedostaci: osnovni nedostaci:
ograniograniene moguene mogunosti alokacijenosti alokacijeunaprijed treba znati maksimalan broj podatakaunaprijed treba znati maksimalan broj podataka
DinamiDinamika alokacija memorijeka alokacija memorije
karakteristikarakteristino za dinamino za dinamike strukture podataka (liste, stabla, ...)ke strukture podataka (liste, stabla, ...)prednost: prednost:
fleksibilnost u pogledu zauzefleksibilnost u pogledu zauzea memorije (alokacija po potrebi)a memorije (alokacija po potrebi)osnovni nedostaci: osnovni nedostaci:
zahtijeva se eksplicitna alokacija i oslobaanje memorijezahtijeva se eksplicitna alokacija i oslobaanje memorije
-
21
88..77.. DinamiDinamika alokacija memorijeka alokacija memorije
DinamiDinamika alokacija?ka alokacija?
FFunkcijunkcije za dinamie za dinamiku alokaciju memorijeku alokaciju memorijevoidvoid *malloc(size)*malloc(size)
rezervirezervie memorijski blok potrebne velie memorijski blok potrebne veliine (size bajtova)ine (size bajtova)ako je alokacija uspjeako je alokacija uspjena vrana vraa pokazivaa pokaziva na na voidvoid, ina, inae vrae vraa 0a 0
voidvoid *calloc(n,size)*calloc(n,size)rezervirezervie memorijski blok za n elemenata velie memorijski blok za n elemenata veliine size (n*size bajtova) ine size (n*size bajtova) ako je alokacija uspjeako je alokacija uspjena vrana vraa pokazivaa pokaziva na na voidvoid, ina, inae vrae vraa 0a 0
void free(pointer)void free(pointer) oslobaa memorijski prostor alociran funkcijama malloc i c oslobaa memorijski prostor alociran funkcijama malloc i callocalloc
pointer pokazuje na popointer pokazuje na poetak bloka koji se etak bloka koji se bribriee
voidvoid *realloc(pointer,size)*realloc(pointer,size) oslobaa rezervisani memorijski blok i alocira novi blok p oslobaa rezervisani memorijski blok i alocira novi blok potrebne veliotrebne veliine ine
ako je realokacija uspjeako je realokacija uspjena vrana vraa pokazivaa pokaziva na na voidvoid, ina, inae vrae vraa 0a 0
-
22
88..77.. DinamiDinamika alokacija memorijeka alokacija memorije
DinamiDinamika alokacija?ka alokacija?
PrimjerPrimjer::#include #include #include #include main()main(){{
int i, n, *niz;int i, n, *niz;dodo{ printf("n="); scanf("%d",&n); }{ printf("n="); scanf("%d",&n); }while (n
-
23
88..77.. DinamiDinamika alokacija memorijeka alokacija memorije
DinamiDinamika alokacija?ka alokacija?
PrimjerPrimjer::#include #include main()main(){{
typedeftypedef structstruct demo { demo { char info;char info;structstruct demo *link;demo *link;} DEMO;} DEMO;
DEMO *DEMO *glavaglava; ; glavaglava = (DEMO*) = (DEMO*) malloc(sizeof(DEMOmalloc(sizeof(DEMO));));glavaglava-->info = 'x';>info = 'x';glavaglava-->link = (DEMO*) >link = (DEMO*) malloc(sizeof(DEMOmalloc(sizeof(DEMO));));glavaglava-->link>link-->info = 'y';>info = 'y';printf("glavaprintf("glava-->info = %>info = %cc\\nn", ", glavaglava-->info);>info);printf("glavaprintf("glava-->link>link-->info = %>info = %cc\\nn", ", glavaglava-->link>link-->info);>info);free(glavafree(glava-->link);>link);free(glavafree(glava););
}}
glava->info = xglava->link->info = y
-
24
88..77.. DinamiDinamika alokacija memorijeka alokacija memorije
Pointer na pointer?Pointer na pointer?
PrimjerPrimjer::#include #include #define RED 3#define RED 3main()main(){ {
intint **mat**mat, , i, j, b=0;i, j, b=0;mat = (mat = (intint**) **) calloc(REDcalloc(RED, , sizeof(intsizeof(int*));*));for (i=0; i
-
25
88.8..8. StringoviStringovi
STRING?STRING?
Stringovi Stringovi String je jednodimenzionalni znakovni niz String je jednodimenzionalni znakovni niz
To je niz znakova koji zavrTo je niz znakova koji zavrava nulava nul--znakom (znak znakom (znak iji je kod 0)iji je kod 0) \\00DeklaracijaDeklaracija stringastringa::
char char ime[duzinaime[duzina] = ] = stringstring ;;iliili
char char ime[duzinaime[duzina] = { ] = { znakznak, , znakznak, , , , znakznak } ;} ;PrimjerPrimjer::
char grad1[] = char grad1[] = BANJA LUKABANJA LUKA ;;char grad2[] = { char grad2[] = { DD,,OO,,BB,,OO,,JJ,,\\00 };};
OOznaznaavanje znakovnih i string konstanti:avanje znakovnih i string konstanti:
DD ovo je znak ovo je znak DDDD ovo je string ovo je string DD,,\\00
-
26
88.8..8. StringoviStringovi
STRING?STRING?
Manipulacija stringomManipulacija stringomIspisivanje stringaIspisivanje stringa
ispisivanje pomoispisivanje pomou funkcije u funkcije printf(printf(%s%s, string); , string);
ispisivanje pomoispisivanje pomou funkcije u funkcije putsputs((string); string);
PrimjerPrimjer::#include #include main()main(){{
charchar grad[]= grad[]= BANJA LUKABANJA LUKA;;printf(printf(%s%s\\nn, grad);, grad);
}}
PrimjerPrimjer::#include #include main()main(){{
charchar grad[]= grad[]= BANJA LUKABANJA LUKA;;puts(gradputs(grad););
}}BANJA LUKA BANJA LUKA
-
27
88.8..8. StringoviStringovi
STRING?STRING?
Manipulacija stringomManipulacija stringomUUitavanjeitavanje stringastringa
uuitavanje pomoitavanje pomou funkcije u funkcije scanf(scanf(%s%s, string); , string);
uuitavanje pomoitavanje pomou funkcije u funkcije getgetss((string); string);
PrimjerPrimjer::#include #include main()main(){{
charchar teksttekst[[5050];];printfprintf((Unesi tekst:Unesi tekst:\\nn););scanfscanf((%s%s,, teksttekst););printf(printf(%s%s, , teksttekst););
}}
PrimjerPrimjer::#include #include main()main(){{
charchar teksttekst[[5050];];printfprintf((Unesi tekst:Unesi tekst:\\nn););getgetss((teksttekst););printf(printf(%s%s, , teksttekst););
}}Unesi tekst:BANJA LUKABANJA
Unesi tekst:BANJA LUKABANJA LUKA
-
28
88.8..8. StringoviStringovi
STRING?STRING?
PrimjerPrimjer:: Program Program kojikoji uuitava string, a zatim ispisuje njegovu duitava string, a zatim ispisuje njegovu duinu.inu.
#include #include int strlen ( char *s )int strlen ( char *s )
{{int i;int i;for (i=0; *for (i=0; *((ss+i)+i)!=!=\\00;; i++)i++);;return(ireturn(i));;
}}main()main(){{
char grad[]=char grad[]=SLOBOMIRSLOBOMIR;;pprintf(rintf(BrojBroj slovaslova: %d: %d,, strlen(gradstrlen(grad) ) ););
}}Broj slova: 8
-
29
88.8..8. StringoviStringovi
STRING?STRING?
PrimjerPrimjer:: Program Program kojikoji uuitava stringitava string i i pravipravi kopijukopiju tog tog stringastringa..
#include #include voidvoid strstrcopycopy ( char *s( char *s1, char *s21, char *s2 ))
{{while ( *s2++ = *s1++ );while ( *s2++ = *s1++ );
}}main()main(){{
char original[100]=char original[100]=BANJA LUKABANJA LUKA;;char kopija[100];char kopija[100];strcopy(originalstrcopy(original, , kopijakopija););printf(printf(%s%s\\nn, original);, original);printf(printf(%s%s\\nn, , kopijakopija););
}} BANJA LUKABANJA LUKA
OSNOVI PROGRAMIRANJA( VIII )POINTERI8.1. Definicija pokazivaa8.2. Operatori za rad sa pokazivaima8.2. Operatori za rad sa pokazivaima8.3. Pokazivai i strukture8.3. Pokazivai i strukture8.3. Pokazivai i strukture8.3. Pokazivai i strukture8.3. Pokazivai i strukture8.3. Pokazivai i strukture8.3. Pokazivai i strukture8.4. Pokazivai i polja8.4. Pokazivai i polja8.4. Pokazivai i polja8.4. Pokazivai i polja8.5. Adresna aritmetika8.5. Adresna aritmetika8.6. Prenos argumenata referisanjem8.6. Prenos argumenata referisanjem8.7. Dinamika alokacija memorije8.7. Dinamika alokacija memorije8.7. Dinamika alokacija memorije8.7. Dinamika alokacija memorije8.7. Dinamika alokacija memorije8.8. Stringovi8.8. Stringovi8.8. Stringovi8.8. Stringovi8.8. Stringovi