facendo delle operazioni aritmetiche sui puntatori si ottenendo diversi risultati:
sui puntatori
puntatore + numero intero = puntatore
addizionando o sottraendo ad un puntatore un valore intero, il puntatore punterà alla cella di memoria successiva.
se il valore é un intero formato da 2 byte (char), il puntatore si posizionerà di 2 byte in più o in meno a seconda se si somma o si sottrae.
esempio: somma di un char
se si somma 1 al puntatore che contiene l'indirizzo 100, questo non conterrà 101, ma 102
se il valore é un intero formato da 8 byte (int), il puntatore si posizionerà di 8 byte in più o in meno a seconda se si somma o si sottrae.
esempio: somma di 3 int
se si somma 3 al puntatore che contiene l'indirizzo 100, questo non conterrà 103, ma 100 + 3 * 8 = 124
puntatore - puntatore = numero intero
sottraendo un puntatore ad un altro puntatore si ottengono i byte che separano i due puntatori + una quantità (dipende dal tipo di puntatore se char, int, ecc...)
puntatore = 0
é una eccezione si puntatori, vuol dire che non si punta a nulla, il puntatore non punta
sulle variabile che si punta
se invece si fanno delle operazioni sulle variabili puntate (sugli indirizzi di memoria), la variabile cambierà di valore
esempio: una funzione viene passato un puntatore che sarà in grado di modificare il valore puntato dal puntatore
void doubleof(int *x) dichiaro il puntatore e ricevo l'indirizzo di memoria
{*x = (*x) * 2;} eseguo l'operazione sulla variabile tramite il puntatore
int main (void)
{int a=2;
doubleof(&a); passo alla funzione l'indirizzo di memoria della variabile
printf("%d", a);
return 0;}
la funzione stamperà il numero 4
esempio: errore, la funzione stampera 2 non 4
void doubleof(int x)
{x = x*2;} la funzione modifica la variabile x, ma la variabile a resta sempre 2
int main (void)
{int a=2;
doubleof(a); passo alla funzione la variabile
printf("%d", a); la variabile a ha sempre il valore 2
return 0;}