C/Vettori e puntatori/Vettori

Wikibooks, manuali e libri di testo liberi.

In C, come in altri linguaggi di programmazione, i vettori, anche chiamati array sono elenchi di variabili ad una o più dimensioni.

Indice

[modifica] Sintassi

Attenzione: l'indicizzazione dei vettori parte da 0 per andare fino a n-1, dove n è il numero di elementi. Perciò:

 int arr[3];
 arr[0]=1;
 arr[1]=2;
 arr[2]=3;
 arr[3]=4; //ERRORE! Fuori dai limiti dell'array.

[modifica] Dichiarazione

Per creare un vettore (monodimensionale):

 int arr[3];

Si può anche inizializzare alla dichiarazione:

 int arr[3]={1,2,3};

che produrrebbe un vettore come il seguente:

arr[0] 1
arr[1] 2
arr[2] 3


Per creare vettori multidimensionali si scrive questo:

 int arr[3][3];

Quest'istruzione produrrebbe un vettore come questo:

0 1 2
0 arr[0][0] arr[0][1] arr[0][2]
1 arr[1][0] arr[1][1] arr[1][2]
2 arr[2][0] arr[2][1] arr[2][2]

in generale un vettore n-dimensionale si dichiara:

tipo Nome_vettore[i1]...[iN];

dove i1 ... iN sono le dimensioni di ciascuna dimensione, che equivale al vettore monodimensionale:

tipo Nome_vettore[i1×...×iN];

ossia al vettore di dimensioni i1×...×iN.

[modifica] Inizializzazione vettore multidimensionale

Un vettore multidimensionale viene inizializzato con la seguente sintassi:

tipo V[i1]...[iN] = {
                     {...
                      {}n1,...,{}ni(N-1)
                     }21,...,{}2i1
                    }1;

dove con {}n si è indicato la coppia di graffe al cui interno ci sono gli inizializzatori relativi alla dimenione n. Per comprendere meglio ecco un esempio:

int V[2][2] = {
               {1,2},
               {3,4}
              };
int V[2][2][2] = {
                  {
                   {1,2},
                   {3,4}
                  },
                  {
                   {5,6},
                   {7,8}
                  },
                 };

Se gli ultimi inizializzatori sono saltati allora si sottintende 0; può essere usata una sintassi semplificata considerandolo come un vettore monodimensionale:

tipo v[i1]...[iN] = {elenco di tutti gli i1×i2×...×iN inizializzatori};

nel caso di una matrice di interi:

int M[2][3] = {1,2,3,
               4,5,6};

saltando gli ultimi inizializzatori si sottintende ossia:

int M[3][3] = {0,0,1,
               0,1,0,
               1};

che definisce la matrice :

0 0 1
0 1 0
1 0 0

Sfruttando questa caratteristica è possibile inizializzare a 0 tutti gli elementi di un vettore n-dimensionale con la seguente sintassi:

tipo V[i1]...[iN] = {0};

[modifica] Vettori dinamici

L'ultimo standard ISO (C99) dà la possibilità di dichiarare vettori di lunghezza variabile ossia la dimensione del vettore è una variabile. Ecco un esempio:

// C99, infatti questo commento è permesso in C99.
 
#include <stdio.h>
 
int main(void){
    int lun;
 
    scanf ("%d",&lun); // lettura di lun
 
    int Array[lun];    // dichiarazione all'interno del codice. C99.
// return 0 implicito, caratteristica C99.
}

[modifica] Assegnamento

È possibile assegnare un valore ad un elemento di un vettore. Si specifica l'indice tra parentesi quadre:

/* C89. Compatibile con vecchi compilatori. */
int main (void)
{
    int arr[3];
 
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    return 0;
}

[modifica] Accesso

Si accede ad un elemento di un vettore specificando il suo indice tra parentesi quadre:

 
/* C89. */
#include <stdio.h>
 
int main (void){
    int i, j, arr[3] = {7,8,9}, M[2][3] = {1,2,3,
                                           4,5,6};
 
    for(i=0; i<3; i++)
        printf("arr[%d] = %d ", i, arr[i]);
    printf("\nM =\n");
    for (i=0; i<2; i++){
        for (j=0; j<3; j++)
            printf("%d ",M[i][j]);
        printf("\n");
    }
 return 0;
}

Il risultato dell'esecuzione del programma è:

arr[0] = 7 arr[1] = 8 arr[2] = 9
M =
1 2 3
4 5 6
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Comunità
Stampa/esporta
Strumenti
Altre lingue