C/Vettori e puntatori/Vettori
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