Funzioni in C++ Passaggio di parametri per indirizzo

8
Funzioni in C++ Passaggio di parametri per indirizzo Passaggio di parametri per indirizzo

description

Funzioni in C++ Passaggio di parametri per indirizzo. Passaggio di parametri per indirizzo. Il passaggio di parametri per indirizzo (o per riferimento) passa alla funzione l’indirizzo di memoria del parametro anziché il valore . - PowerPoint PPT Presentation

Transcript of Funzioni in C++ Passaggio di parametri per indirizzo

Page 1: Funzioni in C++ Passaggio di parametri per indirizzo

Funzioni in C++Passaggio di parametri per indirizzoPassaggio di parametri per indirizzo

Page 2: Funzioni in C++ Passaggio di parametri per indirizzo

22

Il passaggio di parametri per indirizzo (o per riferimento) passa alla funzione l’indirizzo di memoria del parametro anziché il valore.Non ci sono quindi variabili distinte, una nel main ed una nella funzione,ma la funzione opera sulla stessa area di memoria del main.

Data la variabile intera A per sapere qual è l’indirizzo di memoria di A si usa l’operatore &.

Passaggio di parametri per indirizzoPassaggio di parametri per indirizzo

Osserviamo le istruzioni seguenti:Osserviamo le istruzioni seguenti:

int A;int A;

A=5;A=5;

cout <<“A vale ”<<A <<endl;cout <<“A vale ”<<A <<endl;

cout <<“L’indirizzo di A vale cout <<“L’indirizzo di A vale ”<<&A<<endl;”<<&A<<endl;

Sullo schermo viene Sullo schermo viene prodotto:prodotto:

A vale 5A vale 5

L’indirizzo di A vale L’indirizzo di A vale 0x28ff440x28ff44

Che significa che la variabile A è allocata all’indirizzo di memoria 28ff44 che è espresso in base 16 (0x)

28ff44 A A 5 5

Page 3: Funzioni in C++ Passaggio di parametri per indirizzo

33

Passaggio di parametri per indirizzoPassaggio di parametri per indirizzo

Vediamo il seguente esempio in cui lafunzione “aggiungi” aggiunge 1 ai dueparametri ricevuti. Il primo parametro

vienepassato per valore il secondo per

indirizzo.

void aggiungi(int, int &);void aggiungi(int, int &);

int main()int main()

{{ int a,b;int a,b;

a=0;a=0;

b=5; b=5;

aggiungi(a, b);aggiungi(a, b);

cout<<“nel main a vale”<<a;cout<<“nel main a vale”<<a;

cout<<“nel main b vale”<<b;cout<<“nel main b vale”<<b;

}}void aggiungi(int x, int &y)void aggiungi(int x, int &y){x++;{x++; y++;y++; cout<<“nella funzione x vale”<<x;cout<<“nella funzione x vale”<<x; cout<<“nella funzione y vale”<<y;cout<<“nella funzione y vale”<<y; }}

RAMRAM

MAINMAIN FUNZIONEFUNZIONE

aa bb xx yy

Schermo

00 5 5 00

1166

nella funzione: x vale 1nella funzione: x vale 1

nella funzione: y vale 6nella funzione: y vale 6

nel main: a vale 0nel main: a vale 0

nel main: b vale nel main: b vale 66

// //

Page 4: Funzioni in C++ Passaggio di parametri per indirizzo

3.143.14

44

/* Scambio del valore di due variabili mediante /* Scambio del valore di due variabili mediante valore valore */*/#include <iostream>#include <iostream>using namespace std;using namespace std;/* Scambio riceve due parametri di tipo float */

void Scambio(float , float ); void Scambio(float , float ); // prototipo

int main()int main(){{ float var1 = 3.14, var2 = 1.41;float var1 = 3.14, var2 = 1.41; // variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl;cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati i valori contenuti in var1 e var2

Scambio (var1, var2); Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl;endl;}}

// Funzione Scambio che effettua lo scambiovoid Scambio(float x, float y)void Scambio(float x, float y){{ float temp = x;float temp = x; x = y;x = y; y = temp;y = temp;}}

Passaggio di parametri per valorePassaggio di parametri per valore

RAMRAM

MAINMAIN FUNZIONEFUNZIONE

var1var1 var2var2 xx yy temptemp3.143.14 1.41 1.41 // 1.41 1.41 // 3.143.14

1.41 1.41 3.143.14

Prima dello scambio....: var1 = 3.14 var2 = Prima dello scambio....: var1 = 3.14 var2 = 1.411.41

Dopo lo scambio....: var1 = 3.14 var2 = Dopo lo scambio....: var1 = 3.14 var2 = 1.411.41

Schermo

Page 5: Funzioni in C++ Passaggio di parametri per indirizzo

RAMRAM

MAINMAIN FUNZIONEFUNZIONE

var1var1 var2var2 xx yy temptemp

55

/* Scambio del valore di due variabili mediante /* Scambio del valore di due variabili mediante indirizzoindirizzo */ */#include <iostream>#include <iostream>using namespace std;using namespace std;/* Scambio riceve due reference a variabili di tipo float */

void Scambio(float &, float &); void Scambio(float &, float &); // prototipo

int main()int main(){{ float var1 = 3.14, var2 = 1.41;float var1 = 3.14, var2 = 1.41; // variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl;cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati gli indirizzi a var1 e var2

Scambio (var1, var2); Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl;endl;}}

// Funzione Scambio che effettua lo scambiovoid Scambio(float &x, float &y)void Scambio(float &x, float &y){{ float temp = x;float temp = x; x = y;x = y; y = temp;y = temp;}}

Passaggio di parametri per indirizzoPassaggio di parametri per indirizzo

3.143.14 1.41 1.41 // // 3.143.14

1.41 1.41 3.143.14

Prima dello scambio....: var1 = 3.14 var2 = Prima dello scambio....: var1 = 3.14 var2 = 1.411.41

Dopo lo scambio....: var1 = Dopo lo scambio....: var1 = 1.41 1.41 var2 = var2 = 3.143.14

Schermo

Page 6: Funzioni in C++ Passaggio di parametri per indirizzo

66

Passaggio di parametri con i vettoriPassaggio di parametri con i vettori

Nel caso dei vettori l’indirizzo di memoria in cui il vettore è allocato è indicato con il nome del vettore.

Nel caso dei vettori il passaggio di parametri per indirizzo è l’unico utilizzabile

Page 7: Funzioni in C++ Passaggio di parametri per indirizzo

77

ESERCIZIOESERCIZIO: diagramma di struttura: diagramma di struttura

Altezze degli alunniAltezze degli alunnidi una classedi una classe

Inserire le Inserire le altezze in un altezze in un vettorevettore

Calcolare Calcolare la media la media delle delle altezzealtezze

Contare Contare quanti quanti alunni alunni superano la superano la mediamedia

Risolviamo il seguente problema:Date le altezze di 30 alunni di una classe, calcolare l’altezza

media estabilire quanti sono gli alunni che superano la media

Page 8: Funzioni in C++ Passaggio di parametri per indirizzo

88

// prototipi delle funzioni// prototipi delle funzioni

void inserisci(int v[],int);void inserisci(int v[],int);

float calcolamedia(int v[],int);float calcolamedia(int v[],int);

void contaaltezze(int v[],int,float);void contaaltezze(int v[],int,float);

int main()int main(){ { int const max=30;int const max=30;int vett[max];int vett[max];float media;float media;inserisci(vett,max);inserisci(vett,max);media=calcolamedia(vett,max);media=calcolamedia(vett,max);contaaltezze(vett,max,media);contaaltezze(vett,max,media);}}

void inserisci(int v[],int dim) // carico il void inserisci(int v[],int dim) // carico il vettorevettore

{{

for (int i=0;i<dim;i++)for (int i=0;i<dim;i++)

{cout<<"\ndigita un elemento del vettore {cout<<"\ndigita un elemento del vettore ";";

cin>>v[i];cin>>v[i];

}}}}

float calcolamedia(int v[],int dim) float calcolamedia(int v[],int dim) //calcolo la media//calcolo la media

{float s,m;{float s,m;

for (int i=0;i<dim;i++)for (int i=0;i<dim;i++)

s=s+v[i];s=s+v[i];

m=s/dim;m=s/dim;

cout<<"\nla media e' "<<m;cout<<"\nla media e' "<<m;

return m;return m;

}}

void contaaltezze(int v[],int dim,float void contaaltezze(int v[],int dim,float m) //calcolo le altezzem) //calcolo le altezze

{int conta=0;{int conta=0;

for (int i=0;i<dim;i++)for (int i=0;i<dim;i++)

{ {

if (v[i]>m)if (v[i]>m)

conta++;conta++;

}}

cout<<"\ngli alunni che superano la cout<<"\ngli alunni che superano la media sono "<<conta;media sono "<<conta;

}}

SOLUZIONE ESERCIZIO: programmaSOLUZIONE ESERCIZIO: programma