Vai al contenuto

C/Vettori e puntatori/Interscambiabilità tra puntatori e vettori

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Vettori e puntatori sono strettamente legati fra loro.

Infatti, se si usa il nome di un array senza indice, si ottiene un puntatore al suo primo elemento.

Perciò:

a == &a[0]
*a == a[0]

Esempio:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    printf("%i", prova());
    return 0;
}
int prova(void)
{
    int a[3];
    a[0]=78;
    a[1]=93;
    return (*a==a[0]);
}

La funzione prova() restituirà 1 (true).

Come scritto nella pagina sui vettori, è possibile passare un array ad una funzione passando il puntatore al suo primo elemento, per il motivo sopra citato.

Usare l'aritmetica dei puntatori per accedere ad un array

[modifica | modifica sorgente]

L'aritmetica dei puntatori permette di accedere a qualsiasi elemento di un array addizionando un certo valore al puntatore al primo elemento dell'array.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char a[7]={'a', 'b', 'c', 'd', 'e', 'f', 'g'};
    printf("%c %c", a[3], *(a+3));
    return 0;
}

Questo programma restituirà d d, perché a[3] e *(a+3) sono uguali.

Un esempio più complesso

[modifica | modifica sorgente]

Si può usare l'aritmetica dei puntatori anche per accedere ad array multidimensionali, perché gli elementi, per il compilatore, sono ordinati uno dopo l'altro in tutti i tipi di array. In questo esempio si prenderà in considerazione un array 5×3.

#include <stdio.h>
#include <stdlib.h>
#define LunR 5
#define LunC 3

int main(void)
{
    char a[LunC][LunR]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
                        'i', 'j', 'k', 'l', 'm', 'n', 'o'};
    printf("%c %c", a[1][2], *((char *)a+1*LunR+2));
    return 0;
}

Questo programma restituirà h h. È stata operata una conversione cast sul puntatore a per assicurarsi che fosse un puntatore ad un valore char. Si è poi addizionato a questo puntatore una riga (5 elementi) e 2 elementi, per ottenere il carattere che sta sulla seconda riga alla terza colonna (ricordarsi che il primo elemento di un array è [0][0]).