14/07/2024 - BabboNataleacaso ha scritto:
Il mio principale dubbio era il motivo per cui, nella funzione inverso, w[i] riuscisse a cambiare direttamente il contenuto delle variabili senza aver bisogno del simbolo * di dereferenziazione.
Questo e' facile: scrivere
int *pa;
*pa = 10;
e' EQUIVALENTE allo scrivere
pa[0] = 10;
Il C e' ‘stupido’: non conosce la differenza tra un array ed un puntatore ad un oggetto.
Per lui sono ENTRAMBI array, o se vuoi, ENTRAMBI puntatori ad oggetti.
Ed e' altrettanto EQUIVALENTE, scrivere
pa[3] = 33;
oppure
*(pa+3)=33;
.
Ora l' “aritmetica dei puntatori”, tanto cara ai programmatori in erba perche' pensano sia piu' efficiente, puo' tranquillamente essere sostituita, nel 99% dei casi, con la normale sintassi per accedere all'i-esimo elemento di un vettore ("pa[i]", INFINITAMENTE piu' chiaro!) perche' si arrangia il compilatore a fare la conversione.
.
E' responsabilita' del programmatore sapere se un puntatore e' relativo ad un array, nel qual caso e' meglio usare “pa[i]” OPPURE ad un oggetto, nel qual caso si usa “*pa”. Ricordando che “*pa” e' EQUIVALENTE a “pa[0]”.
MA, al'atto pratico, NON CI SONO DIFFERENZE: il codice fa SEMPRE la stessa cosa.