Allora, le cose che ho capito io:
codice:
s[i++] = n%10 + '0';//in s[0], s[1],etcetc metti... (che ci mette esattamente)? perchè+0?
in s ci mette il modulo della divisione per 10, quindi non fa altro che suddividere il numero nelle sue cifre partendo da destra quella meno significativa: se ho 123, ci metto 123 % 10, quindi il resto di 123 / 10 che è 3. Sommarci '0' vuol dire trasformare la cifra numerica in cifra ASCII quindi visualizzabile.
codice:
} while ((n /= 10) > 0); //finchè n!?!?! che condizione è (n /=10)>0 ?!?!?1
scrivere n /= 10 è come scrivere n = n / 10; essendo n intera rimane la parte intera della divisione, quindi fino a quando il numero è divisibile per 10 prosegue il ciclo; quindi mette in s tutte le cifre del numero: se ho 123 farò i passi:
- s[0] = 123 % 10 = 3 + '0' = '3';
- n = 123 / 10 = 12;
- s[1] = 12 % 10 = 2 + '0' = '2';
- n = 12 / 10 = 1;
- s[2] = 1 % 10 = 1 + '0' = '1';
- esco perchè 1 / 10 è zero.
Il test lo posso fare per > 0 perchè tanto n è sempre positivo (grazie al test iniziale).
codice:
if (sign<0) //se sign <0 ma non lo aveva già fatto questo controllo? o questo è alla fine? perchè lo rifà?
Perchè vuole mettere il segno di negativo se il numero era negativo (sign è infatti il valore iniziale di n con segno).
Infine faccio il reverse (tranne il terminatore \0) perchè in s ho "321\0" e a me serve "123\0". Se fosse stato -123 avrei avuto "321-\0" e quindi "-123\0".
In fondo non è poi così complicata