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;}