In questo allegato mi potete spiegare perchè la risposta è la terza?
Grazie a tutti.
Wow grandissimo. Il tuo professore dev'essere un mattacchione.
Comunque lì fa un uso molto molto hacker-style dei puntatori e relativa aritmetica.
Cioè, parte col definire un vettore b di int e un puntatore q che punta al terzo elemento di b ( cioè allo slot che contiene il numero 3 ).
Poi chiama f passandogli questo puntatore q ( cioè il parametro p = locazione del numero 3 in b ). Però poi guarda che fa f. Prima si porta avanti di altri due slot ( x=p+2 ) andando a puntare allo slot di b corrispondente al numero 5 e successivamente va indietro di 3 slot, ritornando questo valore oltretutto ( return x-3 ).
Cioè alla fine ottieni che f(q) ti dà il puntatore allo slot numero 2 di 2, quello che contiene il numero 2.
A questo punto però, fa un'assegnazione tra i valori contenenuti in f(q) e q ( che ricorda, sono entrambi puntatori ). Cioè *f(q) dice "vai a modificare il valore contenuto nell'area di memoria puntata da f(q)" e =*q ti dice "e mettici dentro il valore contenuto nell'area di memoria puntata da q".
In parole povere, prende lo slot 3 di b ( che contiene il numero 3 ), ne legge il contenuto e va a ficcare questo contenuto nello slot 2 di b ( che contiene 2 ).
Per cui b diventa b=[1,3,3,4,5]....cioè il numero nello slot due viene sovrascritto con quello nello slot 3.
Come dicevo, è una mossa di kung fu con l'ausilio dei puntatori. Se capisci come funziona, non avrai mai più problemi coi puntatori in vita tua.