1 / 8

Funzioni in C++ Passaggio di parametri per indirizzo

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 .

ronna
Download Presentation

Funzioni in C++ Passaggio di parametri per indirizzo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Funzioni in C++ Passaggio di parametri per indirizzo

  2. 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. 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 Aper sapere qual è l’indirizzo di memoria diAsi usa l’operatore &. Osserviamo le istruzioni seguenti: int A; A=5; cout <<“A vale ”<<A <<endl; cout <<“L’indirizzo di A vale ”<<&A<<endl; Sullo schermo viene prodotto: A vale 5 L’indirizzo di A vale 0x28ff44 Che significa che la variabile A è allocata all’indirizzo di memoria 28ff44 che è espresso in base 16 (0x) 28ff44 A 5

  3. Passaggio di parametri per indirizzo Vediamo il seguente esempio in cui la funzione “aggiungi” aggiunge 1 ai due parametri ricevuti. Il primo parametro viene passato per valore il secondo per indirizzo. void aggiungi(int, int &); int main() { int a,b; a=0; b=5; aggiungi(a, b); cout<<“nel main a vale”<<a; cout<<“nel main b vale”<<b; } void aggiungi(int x, int &y) {x++; y++; cout<<“nella funzione x vale”<<x; cout<<“nella funzione y vale”<<y; } / / 0 0 5 6 1 Schermo nella funzione: x vale 1 nella funzione: y vale 6 nel main: a vale 0 nel main: b vale 6

  4. Passaggio di parametri per valore /* Scambio del valore di due variabili mediante valore */ #include <iostream> using namespace std; /* Scambio riceve due parametri di tipo float */ void Scambio(float , float ); // prototipo int main() { float var1 = 3.14, var2 = 1.41;// variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati i valori contenuti in var1 e var2 Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl; } // Funzione Scambio che effettua lo scambio void Scambio(float x, float y) { float temp = x; x = y; y = temp; } / / 3.14 1.41 1.41 3.14 3.14 1.41 3.14 Schermo Prima dello scambio....: var1 = 3.14 var2 = 1.41 Dopo lo scambio....: var1 = 3.14 var2 = 1.41

  5. Passaggio di parametri per indirizzo /* Scambio del valore di due variabili mediante indirizzo */ #include <iostream> using namespace std; /* Scambio riceve due reference a variabili di tipo float */ void Scambio(float &, float &); // prototipo int main() { float var1 = 3.14, var2 = 1.41;// variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati gli indirizzi a var1 e var2 Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl; } // Funzione Scambio che effettua lo scambio void Scambio(float &x, float &y) { float temp = x; x = y; y = temp; } / / 3.14 1.41 3.14 1.41 3.14 Schermo Prima dello scambio....: var1 = 3.14 var2 = 1.41 Dopo lo scambio....: var1 = 1.41 var2 = 3.14

  6. Passaggio 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

  7. ESERCIZIO: diagramma di struttura Risolviamo il seguente problema: Date le altezze di 30 alunni di una classe, calcolare l’altezza media e stabilire quanti sono gli alunni che superano la media Altezze degli alunni di una classe Contare quanti alunni superano la media Inserire le altezze in un vettore Calcolare la media delle altezze

  8. // prototipi delle funzioni void inserisci(int v[],int); float calcolamedia(int v[],int); void contaaltezze(int v[],int,float); int main() { int const max=30; int vett[max]; float media; inserisci(vett,max); media=calcolamedia(vett,max); contaaltezze(vett,max,media); } void inserisci(int v[],int dim) // carico il vettore { for (int i=0;i<dim;i++) {cout<<"\ndigita un elemento del vettore "; cin>>v[i]; } } floatcalcolamedia(int v[],intdim) //calcolo la media {float s,m; for (int i=0;i<dim;i++) s=s+v[i]; m=s/dim; cout<<"\nla media e' "<<m; return m; } voidcontaaltezze(int v[],intdim,float m) //calcolo le altezze {int conta=0; for (int i=0;i<dim;i++) { if (v[i]>m) conta++; } cout<<"\ngli alunni che superano la media sono "<<conta; } SOLUZIONE ESERCIZIO: programma

More Related