Pozdrav svima, nije me bilo dugo.
Krenuo sam nesto da se vracam na programiranje i stigoh do teme pokazivaca, pa reku da postavim u ovoj rubrici pitanje, mislim da je najprikladnije tako(znam da je odmoriste, al ne vidoh ni jednu rubriku vezanu za programiranje, a znam da su ljudi objavljivali ranije).
Ovako, zadatak je relativno jednostavan(u pitanju je jezik C, mada to i nije toliko bitno):
Napisati funkciju void uredi(int *pa,int *pb) koja uredjuje svoja dva celobrojna argumenta tako da se u prvom nalazi manja vrednost a u drugom veca. Napisati program koji ucitava dva cela broja i ispisuje uredjene brojeve.
Kod:
#include <stdio.h>
#include <stdlib.h>
/* Argumenti funkcije uredi_pogresno, promenljive a i b,
predstavljaju lokalne promenljive za ovu funkciju i prestaju da
postoje po zavrsetku funkcije. Zbog toga se efekti razmene
vrednosti promenljivih a i b u slucaju da je a>b ne vide u
glavnom programu.
void uredi_pogresno(int a, int b) {
int pom;
if (a > b) {
pom = a;
a = b;
b = pom;
}
} */
/* Argumenti funkcije uredi, promenljive pa i pb, takodje su
lokalne promenljive za ovu funkciju i prestaju da postoje kada
se funkcija zavrsi. Razlika je u tome sto su one adrese
promenljivih a i b koje zelimo da razmenimo u slucaju da je a>b.
Promenljivoj a se pristupa preko pokazivacke promenljive pa sa
*pa i slicno, promenljivoj b sa *pb.
Vrednosti promenljivih *pa i *pb se razmenjuju kao i vrednosti
bilo koje dve celobrojne promenljive. */
void uredi(int *pa, int *pb) {
int pom;
if (*pa > *pb) {
pom = *pa;
*pa = *pb;
*pb = pom;
}
}
int main() {
/* Deklaracija potrebnih promenljivih. */
int a, b;
/* Ucitavanje vrednosti dva cela broja. */
printf("Unesite dva broja:");
scanf("%d%d", &a, &b);
/* Neispravan nacin:
uredi_pogresno(a, b);
printf("Uredjene promenljive: %d, %d\n", a, b); */
/* Funkcija uredi kao argumente prima dve pokazivacke promenljive
(int*,int*). Zbog toga je u pozivu funkcije neophodno
proslediti adrese promenljivih koje zelimo da uredimo rastuce:
&a i &b. */
uredi(&a, &b);
printf("Uredjene promenljive: %d, %d\n", a, b);
exit(EXIT_SUCCESS);
}
Dakle moje pitanje: Meni nije jasno zasto program ne radi u navedenom (komentarisanom slucaju) kada se koriste samo a i b a ne pokazivaci. Jasan je meni koncept lokalne i globalne promenljive(ili mozda ipak nije?) lokalne su lokalne vidi ih samo odredjeni segment koda(npr. funkcije) globalne vaze na nivou celog koda ali opet ja imam kontraprimer gde sam koristio lokalne promenljive za neku funkciju, pozivao tu funkciju iz glavnog programa i sve je bilo vidljivo i program se pokretao normalno. Gde gresim?
P.S. Nadam se da nema neki poseban nacin za kucanje koda kao sto ima za matematiku lateks? Ako ima izvinjavam se promenicu blagovremeno, tj. ako me ne preduhitri Daniel .