Programmazione Procedurale in Linguaggio C++

Documenti analoghi
Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Programmazione Orientata agli Oggetti in Linguaggio Java

4 GLI ARRAY E LE STRINGHE

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Input/output in C e in C++

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Fondamenti VBA. Che cos è VBA

Tecnologie di Sviluppo per il Web

PowerDIP Software gestione presenze del personale aziendale. - Guida all inserimento e gestione dei turni di lavoro -

Programmazione Orientata agli Oggetti in Linguaggio Java

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Linguaggio C: introduzione

Array multidimensionali e stringhe

Definizione di metodi

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Ministero della Salute

Programmazione Orientata agli Oggetti in Linguaggio Java

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Ingegneria del Software

Programmazione Orientata agli Oggetti in Linguaggio Java

AGGIORNAMENTO SOFTWARE

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

La gestione dei caratteri in C

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Lavoro & Previdenza La circolare su temi previdenziali e giuslavoristici

Programmazione Orientata agli Oggetti

Fondamenti di Programmazione

Uso di metodi statici. Walter Didimo

SPORTELLO DIPENDENTE. - Personale amministrativo tecnico ausiliario (A.T.A.);

Laboratorio di Architettura degli Elaboratori

Business Idea o Formula Imprenditoriale

Documento informatico e firme elettroniche nel CAD

1 DESCRIZIONE DELLE FUNZIONI REGISTRAZIONE UTENZE INTERNET Caricamento utente internet (data entry)... 3

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

utente: collezione di contenuti e servizi sviluppatore: pagine e applicazioni

Funzioni condizionali

Sottoprogrammi: astrazione procedurale

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

Costruttore di numeri della WebDewey

EXCEL: FORMATTAZIONE E FORMULE

Corso di Fondamenti di Informatica Classi di istruzioni 2

FONDAMENTI DI INFORMATICA Lezione n. 11

Alcune idee sui sistemi software e la loro architettura

Procedura operativa per la gestione della funzione di formazione classi prime

Tecnologie di Sviluppo per il Web

PG5 Starter Training Applicazione File System Daniel Ernst EN Stefano Peracchi IT

UNIWEB- GUIDA STUDENTE INSERIMENTO PIANO DEGLI STUDI ON LINE

Esonero del corso di Programmazione a Oggetti

WINDOWS Avviare Windows95. Avviare Windows95 non è un problema: parte. automaticamente all accensione del computer. 2. Barra delle applicazioni

Programmazione Orientata agli Oggetti in Linguaggio Java

Espressioni aritmetiche e ordine delle operazioni

1. Qual è il valore giuridico di un documento informatico firmato con firma digitale?

Modulo 2 Data Base - Modello Relazionale

Oggetti e classi. Cos è un oggetto

Diagrammi a blocchi 1

Programmazione Orientata agli Oggetti in Linguaggio Java

Oggetto: Utility per la variazione massiva del codice IVA.

FUNZIONI DI BASE PANNELLO SMS

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

Fiscal News La circolare di aggiornamento professionale

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Il generatore di numeri casuali

Elezioni comunali Esempi di attribuzione dei seggi

Algebra di Boole Algebra di Boole

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi

OGGETTO: Dal 2015 è l esportatore abituale a inviare le lettere d intento

Esempi di attribuzione dei seggi

Tecnologie di Sviluppo per il Web

Il concetto di calcolatore e di algoritmo

Programmazione ad Oggetti

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Formattare il testo con gli stili

Sommario. Note alla traduzione... xix

Corso di Informatica

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

PENSIONI MINIME E MAGGIORAZIONI 2013: ATTENZIONE AI REDDITI

Architettura degli elaboratori Docente:

Gestione delle eccezioni in Java

Rappresentazioni numeriche

Anagrafe Nazionale Studenti aggiornamento sincronizzato. Guida Operativa

Progettazione logica

Pubblicazione di app, fogli e racconti. Qlik Sense 1.1 Copyright QlikTech International AB. Tutti i diritti riservati.

ANAGRAFE NAZIONALE CREDITI FORMATIVI. Manuale utente

Manuale di Aggiornamento BOLLETTINO. Rel B. DATALOG Soluzioni Integrate a 32 Bit

testo Saveris Web Access Software Istruzioni per l'uso

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Integrazione di rete di campo PROFIBUS in reti di fabbrica di tipo Ethernet

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Manutenzione periodica al PIANO DEI CONTI

Esame di INFORMATICA (*) Operazioni Aritmetiche: Somma. Lezione 3. Operazioni Aritmetiche: Somma. Operazioni Aritmetiche: Somma

per immagini guida avanzata Modificare il contenuto del foglio di lavoro Geometra Luigi Amato Guida Avanzata per immagini Excel

Linguaggio C Espressioni e operatori

Transcript:

Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Concetti Avanzati versione 2.5 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Tipi Strutturati: Concetti Avanzati >> Sommario Sommario Tipi Riferimento Tipi Puntatore Valori per un Puntatore Dereferenziazione di un Puntatore Puntatori e Riferimenti Passaggio dei Parametri Puntatori e Array 2

Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento Parametro per riferimento parametro che riceve come valore un riferimento all argomento Riferimento ad un dato intermediario tra il processore e il dato ha come valore l indirizzo di memoria del dato qualsiasi operazione effettuata sul riferimento viene effettuata in realtà sul dato 3 Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento In effetti i riferimenti in C++ possono essere utilizzati anche al di fuori del passaggio dei parametri per esempio è possibile dichiarare variabili che sono riferimenti ad altri dati e quindi possono essere utilizzate come intermediari per utilizzare i dati in questione 4

Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento Di che tipo sono le var. riferimento? i riferimenti sono tipati : ogni riferimento può essere intermediario per dati di un solo tipo es: riferimento a intero, riferimento a stringa ecc. Tipo riferimento dato un tipo T, il tipo dei riferimenti a dati di tipo T è T& es: int&, char&, float& 5 Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento Valore per un riferimento operazione di assegnazione ordinaria a destra deve esserci il dato a cui riferirsi il dato deve essere del tipo opportuno il riferimento viene legato al dato Esempio char c; char& rif = c; string& rif2 = c; // errore 6

Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Riferimenti: Un Esempio #include <iostream.h> void main() { int x; int& rif = x; x = 1; cout << "Valore di x: } " << x << endl; cout << "Valore di rif: " << rif << endl; rif++; cout << "Valore di rif dopo l'incr.:" << rif << endl; cout << "Valore di x dopo l'incr.: " << x << endl; Valore di x: 1 Valore di rif: 1 Valore di rif dopo l incr.: 2 Valore di x dopo l incr.: 2 rif è un riferimento a x (intermediario per x) le operazioni su rif sono in realtà effettuate su x >> riferimenti.cpp 7 Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento Note sui riferimenti devono essere necessariamente inizializzati alla dichiarazione int& rif; // errore sintattico int& rif = x; // OK da quel momento in poi sono intermediari per il dato a cui sono stati legati int x, y; int& rif = x; rif = y; // assegna a x il valore di y 8

Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento In altri termini un riferimento deve essere inizializzato alla dichiarazione legandolo ad un dato del tipo opportuno non possono esistere riferimenti indefiniti da quel momento in poi il riferimento è un intermediario per il dato a cui è stato legato e non può essere legato ad alcun altro dato 9 Tipi Strutturati: Concetti Avanzati >> Tipi Riferimento Tipi Riferimento Utilizzo dei riferimenti in sostanza esclusivamente per il passaggio dei parametri per riferimento Semantica reale dei par. per riferimento un par. per riferimento è un parametro di un tipo riferimento al passaggio dei parametri viene legato all argomento diventa un intermediario per l argomento 10

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Tipi Puntatore Una delle caratteristiche del C/C++ consentire al programmatore di gestire direttamente i registri della memoria ovvero senza passare per le variabili e i parametri Compromesso tra vantaggi e svantaggi efficienza (delle operazioni sono più rapide) poca sicurezza (il codice diventa più fragile) 11 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Tipi Puntatore Lo strumento per farlo i puntatori Puntatore dato il cui valore corrisponde all indirizzo di un altro dato (variabile, parametro, costante) il puntatore punta allo spazio di memoria del dato attraverso il puntatore è possibile manipolare il dato puntato 12

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Tipi Puntatore ATTENZIONE puntatori e riferimenti: ci sono delle analogie ma sono concetti diversi In sintesi, per ora: un riferimento è un intermediario gestito direttamente dal processore (utilizzo trasparente) un puntatore può essere utilizzato come intermediario, ma è il programmatore a doverlo fare i puntatori sono stati pensati principalmente per altri scopi (gestire direttamente la memoria) 13 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Tipi Puntatore Puntatori e tipi di dato come i riferimenti, anche i puntatori sono tipati : ciascun puntatore può contenere l indirizzo di dati di un solo tipo es: puntatore a interi, puntatori a caratteri Tipo puntatore dato un tipo T, il tipo dei puntatori a dati di tipo T è T* es: int*, char*, float* 14

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Valori ammissibili per un puntatore il valore di qualsiasi indirizzo della memoria Inoltre ai puntatori sono applicabili liberamente gli operatori aritmetici Esempio char* p; p = (char*) 1000; p = p + 1; p = p 3; p = p * 2; assegna a p il valore del registro (p punta al registro 1000); il cast è necessario perché 1000 è una costante di tipo int 15 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore >> puntatori.cpp Inoltre attraverso il puntatore è possibile cambiare il valore dei registri di memoria Esempio void main() { char* p; p = (char*) 1000; *p = 1; // dereferenziazione >> } ATTENZIONE: questo codice è sintatticamente corretto ma logicamente scorretto 16

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Il problema dei puntatori la gestione diretta della memoria provoca facilmente errori di sconfinamento tentativo di utilizzare zone di memoria non assegnate al programma (con gravi errori) Utilizzo corretto dei puntatori solo per la manipolazione di zone di memoria assegnate ai dati del programma costanti, variabili, parametri 17 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Valori corretti per un puntatore indirizzi di memoria di dati del programma Due modi possibili modo n.1 chiedere l indirizzo di un dato (variabile, parametro, costante) già dichiarato modo n. 2 chiedere di assegnare un nuovo spazio al programma e utilizzare l indirizzo 18

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore #1502 Modo n. 1 indirizzi di memoria di dati del programma ottenibili a partire dai dati in questione attraverso l operazione di referenziazione Operatore di referenziazione : & applicato ad un dato, restituisce il suo indirizzo di memoria anche detto operatore di indirizzo es: int x; int* p; p = &x; #1500 #1501 x p xxx #1500 p punta a x 19 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Modo n. 2 indirizzo di un nuovo spazio di memoria è possibile chiedere un nuovo spazio con l operatore new e poi rilasciarlo con l operatore delete Esempio: float* p; p = new float; // operazioni su p delete p; #1500 p xxx #2500 #2500 *p xxx attribuisce al programma un nuovo spazio di memoria e ne assegna l indirizzo a p 20

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Semantica di new <tipo> attribuisce al programma un nuovo spazio di memoria del tipo specificato restituisce l indirizzo del nuovo spazio Semantica di delete p libera lo spazio di memoria puntato da p al termine il valore di p è indefinito (come quello di un puntatore non inizializzato) 21 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Attenzione si tratta di un meccanismo del tutto nuovo Finora la memoria veniva attribuita al programma solo sulla base delle dichiarazioni che erano stabilite a tempo di compilazione Con new e delete posso richiedere e rilasciare memoria a tempo di esecuzione è lo strumento che viene utilizzato per costruire strutture dinamiche (>>) 22

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Inoltre la memoria attribuita al programma attraverso l istruzione new NON viene allocata nella pila di attivazione viene utilizzata una nuova zona di memoria Heap ( Mucchio ) zona di memoria riservata all utilizzo dinamico della memoria con new e delete 23 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Valori per un Puntatore Un valore speciale per i puntatori: NULL riferimento nullo quando un puntatore assume il valore NULL non punta a nessun registro della memoria Esempio int* p; p = NULL; In alternativa p = 0; // 0 e NULL sono equivalenti 24

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Dereferenziazione di un Puntatore Come utilizzare il dato puntato da un puntatore? attraverso un opportuno operatore applicato al puntatore operatore di dereferenziazione Operatore di dereferenziazione : * operatore che, applicato ad un puntatore, consente di lavorare sullo spazio di memoria puntato dal puntatore 25 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Dereferenziazione Esempio: char c; char* p; p = &c; In questo caso *p fa rappresenta lo spazio di memoria puntato da p (cioè lo spazio di c) è possibile utilizzarlo come un qualsiasi altro dato nelle istruzioni 26

Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Un Esempio #include <iostream.h> #2500 #2501 #2502 c p a #2500 void main() { char c; char* p; p = &c; *p = 'a'; } cout << "Valore di c: " << c << endl; cout << "Valore di p: " << (int)p << endl; cout << Valore di *p: << *p << endl; Valore di c: a Valore di p: 2500 Valore di *p: a p punta a c (il valore di p è l indirizzo di c) *p rappresenta lo spazio di memoria di c >> puntatori2.cpp 27 Tipi Strutturati: Concetti Avanzati >> Tipi Puntatore Dereferenziazione Attenzione il puntatore nullo (NULL) non può essere dereferenziato si tratta di un grave errore logico Nota a differenza dei puntatori, i riferimenti del C++ non possono essere nulli devono essere necessariamente inizializzati alla dichiarazione ma in linea di principio avrebbe senso avere anche riferimenti nulli 28

Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Puntatori e riferimenti molte analogie, alcune differenze sostanziali In sintesi nella sostanza, sono due strumenti diversi per fare le stesse cose qualunque cosa si possa fare con i puntatori si può fare anche con i riferimenti ma ciascuno ha un utilizzo privilegiato 29 Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Puntatore e riferimento: analogia entrambi hanno come valore l indirizzo di memoria del dato void main() { char c; char& rif = c; } void main() { char c; char* p = &c; } #2500 c xxx valori di tipo char #2500 c xxx valori di tipo char #2501 rif #2500 valori di tipo char& #2501 p #2500 valori di tipo char* #2502 #2502 30

Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Puntatore e riferimento: differenza il riferimento è un intermediario automatico : qualsiasi operazione sul riferimento viene automaticamente effettuata sul dato il puntatore può essere utilizzato come se fosse un intermediario, ma il programmatore deve manipolare esplicitamente la memoria usando l operatore di dereferenziazione 31 Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Nell esempio precedente void main() { char c; char& rif = c; rif = a ; } void main() { char c; char* p = &c; *p = a ; } #2500 c xxx a valori di tipo char #2500 c xxx a valori di tipo char #2501 rif #2500 valori di tipo char& #2501 p #2500 valori di tipo char* #2502 #2502 32

Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Ricapitolando abbiamo introdotto due nuovi categorie di tipi: tipi riferimento e tipi puntatore abbiamo introdotto due nuovi operatori: operatore di indirizzo (&), operatore di dereferenziazione (*) Utilizzo di & e * due funzioni diverse per ciascun simbolo attenzione a non fare confusione 33 Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Dopo un tipo & definisce un tipo riferimento es: int& rif = x; * definisce un tipo puntatore es: char* p; Prima di un dato operatore di indirizzo: restituisce l indirizzo di memoria del dato (parametro, costante, variabile) es: char* p = &c; operatore di dereferenz.: serve ad utilizzare lo spazio di memoria puntato dal dato (che deve essere un puntatore) es: *p = x ; 34

Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Riferimenti vengono dichiarati di tipo riferimento (utilizzo di & nella dichiarazione dopo il tipo) vengono utilizzati come dati ordinari (senza bisogno di & né * nelle istruzioni) Puntatori vengono dichiarati di tipo puntatore (utilizzo di * nella dichiarazione dopo il tipo) per assegnargli un valore si usa & per utilizzare lo spazio di memoria si usa * 35 Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Utilizzo principale dei riferimenti passaggio dei parametri per riferimento Utilizzi principale dei puntatori costruire strutture di dati collegate di carattere dinamico es: rappresentazione collegata per le liste ne parleremo più avanti (>>) 36

Tipi Strutturati: Concetti Avanzati >> Puntatori e Riferimenti Puntatori e Riferimenti Ma i due tipi di dato sono in pratica sostituibili In particolare i puntatori possono essere utilizzati per simulare il pass. per riferimento nei linguaggi in cui ci sono solo par. per valore (es: C) i riferimenti possono essere utilizzati per costruire strutture collegate nei linguaggi senza gestione della memoria (es: Java) 37 Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Passaggio dei Parametri In C++ parametri standard (di tipo ordinario) parametri per riferimento (di tipo riferimento) Ma esistono linguaggi in cui non esistono i tipi riferimento esempio: il linguaggio C in questi linguaggi: solo parametri standard come è possibile modificare gli argomenti? 38

Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Passaggio dei Parametri Soluzione si utilizzano i tipi puntatore Idea il parametro viene dichiarato di tipo puntatore l argomento che viene passato è l indirizzo del dato da modificare nel sottoprogramma il puntatore viene dereferenziato per utilizzare il dato cioè: il puntatore è usato come intermediario 39 Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Passaggio dei Parametri Un esempio semplice un programma che scambia il valore di due variabili un sottoprogramma per lo scambio Scambio di due valori x e y Esempio x y uso un terzo valore, z assegno il valore di x a z assegno il valore di y a x assegno il valore di z a y v. iniziali I passo II passo III passo 5 5 10 10 10 10 10 5 z xxx 5 5 5 40

Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Passaggio dei Parametri Nota se non utilizzassi la variabile z non potrebbe funzionare Esempio assegno il valore di x a y assegno il valore di y a x analogamente se faccio il contrario Esempio v. iniziali I passo II passo x 5 5 5 y 10 5 5 41 Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Passaggio dei Parametri #include <iostream.h> void scambia (int& x, int& y); void main() { int a, b; cout << "Immetti il valore di a: "; cin >> a; cout << "Immetti il valore di b: "; cin >> b; scambia(a, b); cout << "Valore di a dopo lo scambio: " << a << endl; cout << "Valore di b dopo lo scambio: " << b << endl; } void scambia (int& x, int& y) { int z; z = x; x = y; y = z; return; } >> scambio1.cpp 42

Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Puntatori e Array Una particolarità del C++ il passaggio dei parametri di tipo array finora considerata una eccezione In realtà si tratta di un passaggio di parametri basato su puntatori per via della particolare natura degli array in C/C++ 43 Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Puntatori e Array Array zona di memoria di variabili dello stesso tipo più una variabile aggiuntiva: la variabile array Variabile array puntatore alla zona di memoria dell array Parametro array parametro di tipo puntatore il parametro viene dereferenziato con [] 44

Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Puntatori e Array In effetti, in C/C++ i tipi array e i tipi puntatori sono strettamente legati e di fatto intercambiabili per ogni tipo T, T* e T[] sono equivalenti es: int* e int[] le parentesi quadre sono operatori di dereferenziazione se x è un array: x[i] = *(x + i) 45 Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Puntatori e Array Esempio: float temp[n]; la variabile array temp è di tipo float* temp[0] è equiv a *temp (la prima variabile dell array) temp[1] è equiv a *(temp + 1) (la seconda variabile dell array) temp[2] è equiv a *(temp + 2) (la terza variabile dell array) 46

Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Puntatori e Array Di conseguenza tutto quello che il sottoprogramma ha bisogno di conoscere è il puntatore all array non è indispensabile che conosca la dimensione dell array non vengono fatti controlli sullo sconfinamento di conseguenza non è indispensabile specificare la dimensione di un par. array 47 Tipi Strutturati: Concetti Avanzati >> Passaggio dei Parametri Esempio: Le Temperature #include <iostream.h> >> temperature3.cpp const int N = 12; void leggi (float temp[n]); void stampa (float temp[n]); void main() { float temperature[n]; leggi (temperature); stampa (temperature); } prototipi equivalenti: void leggi (float* temp); void stampa (float* temp); void leggi (float temp[]); void stampa(float temp[]); 48

Tipi Strutturati: Concetti Avanzati >> Sommario Riassumendo Tipi Riferimento Tipi Puntatore Valori per un Puntatore Dereferenziazione di un Puntatore Puntatori e Riferimenti Passaggio dei Parametri Puntatori e Array 49 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 50