PROGRAMMIAMO
C++ - Passaggio di vettori
Passaggio di un vettore a una funzione

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'.

Passaggio del vettore per riferimento

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;
   }

}

 

 

 

link precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it