View Single Post
Old 11-06-2008, 17:15   #2
arcer
Senior Member
 
L'Avatar di arcer
 
Iscritto dal: Sep 2005
Città: Messina
Messaggi: 561
Quote:
Originariamente inviato da phantom85 Guarda i messaggi
Ciao a tutti,
ho scritto un breve programma in C in cui c'è una funzione che passati due interi, scambia il contenuto delle due variabili e restituisce il puntatore al valore più grande.

Ho anche scritto un main per testarlo inizializzando le variabili.

Il problema è che nell'esecuzione da shell mi dà segmentation fault, mentre sul pc di un mio amico lo stesso programma funziona.

Come mai???


ecco il codice in allegato... HELP


se vuoi una funzione che scambi semplicemente due numeri puoi usare una proprieta molto carina dello XOR che è questa:

a^=b;
b^=a;
a^=b;

che vuol dire

a=a^b;
b=b^a;
a=a^b;

esempio pratico

a=5 b=2
1° step a=a^b;----> a=5^2=7 stato: a=7 b=2
2° step b=b^a;----> b=2^7=5 stato: a=7 b=5
3° step a=a^b;----> a=7^5=2 stato: a=2 b=5

CVD :P

un'implementazione della funzioncina potrebbe essere:

Codice:
void scambi(int *a, int *b)
{
(*a)^=(*b);
(*b)^=(*a);
(*a)^=(*b);
}
non restituisce nulla ma se tu passi i due numeri alla fine ti ritroverai i due numeri scambiati se vuoi che ti restituisca qualcosa metti un if e ti fai ritornare il puntatore alla variabile piu grande :P
__________________
Bill Gates: "Noi siamo la MicroSoft. Voi sarete assimilati. La resistenza è inutile."

Kenneth Olson (fondatore della Digital Equipment Corporation) : "Ma che bisogno avrebbe una persona di tenersi un computer in casa?"
arcer è offline   Rispondi citando il messaggio o parte di esso