E' possibile passare a una funzione un intero vettore, come mostra l'esempio seguente:
#include <cstdlib>
#include <iostream>
using namespace std;
double calcola_media(double num[], int n);
int main(int argc, char *argv[])
{
double numeri[10], ris;
int i;
cout<<"Inserisci 10 numeri\n";
for (i=0; i<10 ;i++)
cin>>numeri[i];
ris = calcola_media(numeri,10);
cout<<"La media e' "<<ris<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
double calcola_media(double num[], int n)
{
int i, somma=0;
for (i=0;i<n;i++)
somma = somma + num[i];
return somma/n;
}
Cominciamo osservando il prototipo della funzione:
double calcola_media(double num[], int n);
Notiamo che il vettore viene indicato con num[], con le parentesi quadre vuote. La presenza delle parentesi quadre serve per segnalare che si tratta di un vettore e non di una semplice variabile.
D'altra parte nella chiamata alla funzione le parentesi non ci sono:
ris = calcola_media(numeri,10);
E' importante anche osservare la necessità di passare alla funzione anche la dimensione massima del vettore (nel nostro caso 10). In caso contrario la funzione non sa quanto è grande il vettore e potrebbe causare overflow. Questa regola non è necessaria per i vettori di char (stringhe) terminati dal carattere di fine stringa '\0'.
Contrariamente alla regola generale esposta nella lezione precedente, il passaggio di vettori alle funzioni avviene sempre per riferimento e non per valore. Ciò significa che la funzione non riceve una copia del vettore ma l'originale stesso e che quindi può modificarne il contenuto.
Come esempio, consideriamo la seguente funzione che riceve una serie di numeri in un vettore e che inverte il contenuto del vettore stesso, spostando il primo valore in ultima posizione, il secondo in penultima e così via. L'inversione è possibile poiché in effetti la funzione può modificare il vettore originale che le è stato passato:
void inverti(int vett[], int dim)
{
int i, tmp;
for (i=0;i<dim/2;i++)
{
tmp=vett[i];
vett[i]=vett[dim-i-1];
vett[dim-i-1]=tmp;
}
}
Sito realizzato in base al template offerto da
http://www.graphixmania.it