/* Demonstrira prenos argumenata preko pokazivaca - swap */
#include <stdio.h>

/* Pogresna verzija funkcije swap. Zbog prenosa po vrednosti, funkcija 
   razmenjuje kopije promenljivih iz main-a, a ne samih promenljivih */
void swap_wrong(int x, int y)
{
	int tmp;
	
	printf("swap_wrong: ");
	printf("Funkcija menja vrednosti promenljivim na adresama : \n");
	printf("x : %p\n", &x);
	printf("y : %p\n", &y);
	
	
	tmp = x;
	x = y;
	y = tmp;
}

/* Resenje je prenos argumenata preko pokazivaca */
void swap(int* px, int* py)
{
	int tmp;
	
	printf("swap : Funkcija menja vrednosti promenljivim na adresama : \n");
	printf("px = %p\n", px);
	printf("py = %p\n", py);
	
	tmp = *px;
	*px = *py;
	*py = tmp;
}

main()
{
	int x = 3, y = 5;
	printf("Adresa promenljive x je %p\n", &x);
	printf("Vrednost promenljive x je %d\n", x);
	printf("Adresa promenljive y je %p\n", &y);
	printf("Vrednost promenljive y je %d\n", y);	
	
	/* Pokusavamo zamenu koristeci pogresnu verziju funkcije */
	swap_wrong(x, y);
	
	printf("Posle swap_wrong:\n");
	printf("Vrednost promenljive x je %d\n", x);
	printf("Vrednost promenljive y je %d\n", y);
	
	/* Vrsimo ispravnu zamenu. Funkciji swap saljemo adrese promenljvih 
	   x i y, a ne njihove vrednosti */
	swap(&x, &y);
	
	printf("Posle swap:\n");
	printf("Vrednost promenljive x je %d\n", x);
	printf("Vrednost promenljive y je %d\n", y);
}