Professional Documents
Culture Documents
udnovate stvari
(sve to vam niko nije rekao o
pokazivaima i stringovima)
Doc. dr Vedran Ljubovi
Deklaracije stringova
Niz od 10 elemenata:
char s[10] = "Test";
... 250 251 252 253 254 255 256 257 258 259 260 ...
... T e s t \0 ...
Niz od 5 elemenata:
char s[] = "Test";
... 250 251 252 253 254 255 256 257 258 259 260 ...
... T e s t \0 ...
Pokaziva na literal:
char* s = "Test";
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 256 T e s t \0 ...
Pokaziva na literal:
char* s = "Test";
Ovo je jedini nain u C-u da deklariemo pokaziva na
literal.
Bitno je da se ovakav string ne moe mijenjati! Npr. elimo
da spojimo dvije rijei sa razmakom izmeu:
printf("%s", spoji(rijec1, spoji(" ", rijec2)));
Pokaziva na literal:
char* s = "Test";
Ovo je jedini nain u C-u da deklariemo pokaziva na
literal.
Bitno je da se ovakav string ne moe mijenjati! Npr. elimo
da spojimo dvije rijei sa razmakom izmeu:
printf("%s", spoji(rijec1, spoji(" ", rijec2)));
Pokaziva na literal:
char* s = "Test";
Ovo je jedini nain u C-u da deklariemo pokaziva na
literal.
Bitno je da se ovakav string ne moe mijenjati! Npr. jer
Krahiranje, elimo
da spojimo dvije rijei sa razmakom izmeu: je " " literal
printf("%s", spoji(rijec1, spoji(" ", rijec2)));
Pokaziva na literal:
char* s = "Test";
Ovo je jedini nain u C-u da deklariemo pokaziva na
literal.
Bitno je da se ovakav string ne moe mijenjati! Npr. elimo
da spojimo dvije rijei sa razmakom izmeu:
printf("%s", spoji(rijec1, spoji(" ", rijec2)));
treba ovako:
char razmak[100] = " ";
printf("%s", spoji(rijec1, spoji(razmak, rijec2)));
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 254 ...
broj p dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 251 259 254 ...
broj p tp dp
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 253 257 264 1 9 . \0 J a n u ...
... 261 262 263 264 265 266 267 268 269 270 271 ...
... a r \0 2 0 1 6 . \0 ...
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 253 257 264 1 9 . \0 J a n u ...
... 261 262 263 264 265 266 267 268 269 270 271 ...
... a r \0 2 0 1 6 . \0 ...
... 261 262 263 264 265 266 267 268 269 270 271 ...
... a r \0 2 0 1 6 . \0 ...
... 261 262 263 264 265 266 267 268 269 270 271 ...
... a r \0 2 0 1 6 . \0 ...
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 1 9 . \0 J ...
... 261 262 263 264 265 266 267 268 269 270 271 ...
... a n u a r \0 2 0 ...
Nema niza
pokazivaa
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 1 9 . \0 J ...
... 261 262 263 264 265 266 267 268 269 270 271 ...
... a n u a r \0 2 0 ...
Primjer:
#include <stdio.h>
int primimatricu(int (*mat)[10], int redova) {
printf("%d", mat[0][0]);
}
int main() {
int matrica[10][10] = {{15}};
primimatricu(matrica, 10);
return 0;
}
Primjer:
int main(int argc, char** argv) {
int i;
printf("Program ima %d parametara.\n", argc);
printf("Ti parametri su:\n");
for (i=0; i<argc; i++)
printf("%s\n", argv[i]);
return 0;
}
Prvi parametar je uvijek ime samog programa.
temp = niz[i];
niz[i] = niz[min];
niz[min] = temp;
}
temp = niz[i];
niz[i] = niz[min];
niz[min] = temp;
}
temp = niz[i];
niz[i] = niz[min];
niz[min] = temp;
}
temp = niz[i];
niz[i] = niz[min]; Trebamo koristiti
funkcije strcmp
niz[min] = temp; i strcpy
}
temp = niz[i];
niz[i] = niz[min];
niz[min] = temp;
}
}
???
temp = niz[i];
niz[i] = niz[min];
niz[min] = temp;
}
}
j e \0
b i o \0
l i j e p \0
d a n \0
j e \0
b i o \0
l i j e p \0
d a n \0
temp = niz[i];
niz[i] = niz[min];
niz[min] = temp;
}
}
char* const a = s;
Ovim je deklarisan konstantni pokaziva a koji sada moe
pokazivati samo na s i ni na ta drugo (ne moe se pomjerati).
const char* b = s;
Pokaziva koji pokazuje na konstantne podatke. Pokaziva se
moe usmjeriti negdje drugo, ali se ono na ta on pokazuje ne
moe mijenjati. Primjer:
*a = x; /* Moze */
a = &x; /* Ne moze */
*b = x; /* Ne moze */
b = &x; /* Moze */
Primjer:
int kvadrat(int x) {
return x*x;
}
...
int (*p)(int) = kvadrat;
Primjer:
int kvadrat(int x) {
return x*x;
} Deklarisana je
promjenljiva p
...
int (*p)(int) = kvadrat;
Primjer:
int kvadrat(int x) {
return x*x;
} Deklarisana je
promjenljiva p
...
int (*p)(int) = kvadrat;
Primjer:
int kvadrat(int x) {
return x*x;
} Deklarisana je Pokaziva pokazuje
promjenljiva p na funkciju kvadrat
...
int (*p)(int) = kvadrat;
Primjer:
int kvadrat(int x) {
return x*x;
} Deklarisana je Pokaziva pokazuje
promjenljiva p na funkciju kvadrat
...
int (*p)(int) = kvadrat;
Parametar funkcije
je broj 5
Parametar funkcije
k e biti 25 je broj 5
Primjer:
void* p;
...
if (tip == INT_TIP)
printf("%d", *(int*)p);
Prije upotrebe void* moramo pretvoriti (cast) u neki drugi
tip.
Primjer:
void* p; Konvertujemo u
... pokaziva na int
if (tip == INT_TIP)
printf("%d", *(int*)p);
Prije upotrebe void* moramo pretvoriti (cast) u neki drugi
tip.
Primjer:
Tako dobiveni pokaziva
void* p; dereferenciramo kako bismo
... dobili cijeli broj
if (tip == INT_TIP)
printf("%d", *(int*)p);
Prije upotrebe void* moramo pretvoriti (cast) u neki drugi
tip.
Primjer:
#include <stdio.h>
#include <string.h>
int main() {
char tekst[] = " Ovo, za pocetak,, je neki
primjer.";
char* p;
p = strtok(tekst, " .,");
while (p != NULL) {
printf("Rijec: %s\n", p);
p = strtok(NULL, " .,");
}
return 0;
}
Primjer:
#include <stdio.h>
#include <string.h>
int main() {
char tekst[] = " Ovo, za string
Cjepkamo pocetak,, je neki
po znakovima
primjer."; razmak, taka i zarez
char* p;
p = strtok(tekst, " .,");
while (p != NULL) {
printf("Rijec: %s\n", p);
p = strtok(NULL, " .,");
}
return 0;
}
Primjer:
#include <stdio.h>
#include <string.h>
int main() {
char tekst[] = " Ovo,
Cjepkamoza string
pocetak,, je neki
po znakovima
primjer."; razmak, taka i zarez
char* p;
p = strtok(tekst, " .,");
while (p != NULL) {
printf("Rijec: %s\n", p);
p = strtok(NULL, " .,");
}
return 0;
} Nakon posljednje rijei
dobiemo NULL
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 + 7 = 1 2 \0 ...
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 + 7 = 1 2 \0 ...
... 250 251 252 253 254 255 256 257 258 259 260 ...
... 5 + 7 = 1 2 \0 ...
Drugi primjer:
char recenica[] = "Mehmed ima 19 godina";
char ime[20];
int godina;
sscanf(recenica, "%s %*s %d", ime, &godina);
printf("Ime: %s, Godina: %d\n", ime, godina);