C/Vettori e puntatori/Vettori: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: apostrofo dopo l'articolo indeterminativo
Riga 182: Riga 182:


[[Categoria:C|Vettori]]
[[Categoria:C|Vettori]]



[[en:C Programming/Arrays]]
[[en:C Programming/Arrays]]
[[et:Programmeerimiskeel C/Massiivid]]
[[fi:C/Taulukot]]
[[pl:C/Napisy]]

Versione delle 17:58, 24 ago 2009

Indice del libro

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

Sintassi

Attenzione: l'indicizzazione degli array 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.

Dichiarazione

Per creare un vettore (monodimensionale):

 int arr[3];

Si può anche inizializzare alla dichiarazione:

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

che produrrebbe un array come il seguente:

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


Per creare array multidimensionali si scrive questo:

 int arr[3][3];

Quest'istruzione produrrebbe un array 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]

o anche

 int arr[3][3][3];

cioè un array cubico di 3x3x3.

L'indice deve essere una costante, non una variabile.

Assegnamento

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

 int arr[3];
 arr[0]=1;
 arr[1]=2;
 arr[2]=3;

Accesso

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

 int arr[3]={7, 8, 9};
 int i;
 for(i=0; i<3; i++)
 {
  printf("Il numero %d è %d.\n", i, arr[i]);
 }

Passare un array ad una funzione

Primo metodo

Il nome di un array, generalmente, decade in un puntatore al suo primo elemento. Questo avviene sempre, tranne quando si usa il nome dell'array come argomento di sizeof, quando si usa l'operatore & ("indirizzo di"), o durante un'inizializzazione con una stringa letterale. Tale puntatore può essere passato ad una funzione. In questo modo si può passare un intero array alla funzione.

Per esempio:

 void doubleof(int *ilmioarray);
 
 int main(void)
 {
  int arr[5]={1,2,3,4,5};
  doubleof(arr);
  int i;
  for (i=0; i<5; i++)
  {
   printf("L'elemento all'indice %d è %d.\n", i, arr[i]);
  }
  return 0;
 }
 
 void doubleof(int *ilmioarray)
 {
  int j;
  for(j=0; j<5; j++)
  {
   ilmioarray[j]=ilmioarray[j]*2;
  }
 }

restituisce:

L'elemento all'indice 0 è 2.
L'elemento all'indice 1 è 4.
L'elemento all'indice 2 è 6.
L'elemento all'indice 3 è 8.
L'elemento all'indice 4 è 10.

Secondo metodo

In questo metodo cambia solo la sintassi della funzione, ma il meccanismo è identico. Il vantaggio di questo meccanismo è che rende palese il fatto che ad una funzione verrà passato un array, ma se alla funzione fosse passato un puntatore non produrrebbe errori in fase di compilazione, ma si potrebbe comportare in modo insolito.

 void doubleof(int ilmioarray[]);
 
 int main(void)
 {
  int arr[5]={1,2,3,4,5};
  doubleof(arr);
  int i;
  for (i=0; i<5; i++)
  {
   printf("L'elemento all'indice %d è %d.\n", i, arr[i]);
  }
  return 0;
 }
 
 void doubleof(int ilmioarray[])
 {
  int j;
  for(j=0; j<5; j++)
  {
   ilmioarray[j]=ilmioarray[j]*2;
  }
 }