Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri
|
|
- Carmelo Giuliano
- 6 anni fa
- Visualizzazioni
Transcript
1 Funzioni (Passaggio dei parametri per riferimento) Passaggio dei parametri Per passaggio dei parametri si intende l associazione fra parametri attuali e parametri formali che avviene al momento della chiamata di una funzione (o procedura) Il meccanismo adottato in C, si chiama PASSAGGIO DI PARAMETRI PER VALORE Non è il solo meccanismo possibile Altri linguaggi forniscono anche: Passaggio per indirizzo (o riferimento) Passaggio per valore-risultato Programmazione - Michele Colajanni, 2006/
2 Passaggio dei parametri per valore Le locazioni di memoria corrispondenti ai parametri formali: Sono allocate al momento della chiamata della funzione Sono inizializzate con i valori dei corrispondenti parametri attuali trasmessi dalla funzione chiamante Vivono per tutto il tempo in cui la funzione è in esecuzione Sono deallocate quando la funzione termina Programmazione - Michele Colajanni, 2006/ Passaggio parametri per valore (cont.) QUINDI: La funzione chiamata riceve copia dei valori dei parametri attuali passati dalla funzione chiamante Tali copie sono sue copie private che servono solo per inizializzare i parametri formali Ogni modifica ai parametri formali è strettamente locale alla funzione I parametri attuali della funzione chiamante non saranno mai modificati! Programmazione - Michele Colajanni, 2006/
3 Perché il C adotta il passaggio per valore? E sicuro: le variabili del chiamante e del chiamato sono completamente disaccoppiate Consente di ragionare per componenti e servizi: la struttura interna dei singoli componenti è irrilevante (la funzione può anche modificare il contenuto dei parametri formali, inizializzati ai valori dei parametri attuali, senza che ciò abbia alcun impatto sui valori dei parametri attuali nell ambiente del chiamante) Programmazione - Michele Colajanni, 2006/ Limite del passaggio per valore Il passaggio per valore ha una SEMANTICA PER COPIA Impedisce a priori di scrivere funzioni che abbiano come scopo quello di modificare i dati passati dall ambiente chiamante (collegato al precedente) Impedisce di restituire più di un risultato all ambiente chiamante Programmazione - Michele Colajanni, 2006/
4 STACK Esempio (Programma scambia ) void scambia(int A, int B) int t; t = A; A = B; B = t; int x = 12, y = 27; printf( x=%d y=%d\n, x, y); scambia(x, y); printf( x=%d y=%d\n, x, y); Stampa (voluta) x=12 y=27 x=27 y=12 Stampa vera x=12 y=27 x=12 y=27 MOTIVO: Semantica del passaggio di parametri per valore. La funzione scambia ha scambiato A e B al suo interno, ma questa modifica non si è propagata ai parametri attuali Programmazione - Michele Colajanni, 2006/ Record di attivazione di scambia void scambia(int A, int B) int t; t = A; A = B; B = t; int x = 12, y = 27; printf( x=%d y=%d\n, x, y); scambia(x, y); printf( x=%d y=%d\n, x, y); A B t x y ritorno main Link main ritorno S.O record di attivazione di scambia() record di attivazione di La figura illustra la situazione nellostack nel momento di massima espansione, quando la funzione sta per terminare. Quando la funzione scambia() termina, il suo record viene deallocato e il risultato viene trasferito (tramite un registro della CPU) nella cella di nome y Programmazione - Michele Colajanni, 2006/
5 Passaggio dei parametri per riferimento La versione corretta del programma C che realizza la funzione scambia() necessita di un passaggio di parametri per riferimento In pratica, per superare i limiti della semantica per copia, occorre consentire alla funzione di far riferimento alle variabili dell ambiente del chiamante Programmazione - Michele Colajanni, 2006/ Principî del passaggio per riferimento Una funzione deve poter dichiarare, nella sua intestazione, che un parametro costituisce un riferimento In tal caso: il parametro formale indicato come riferimento non è più una variabile locale inizializzata al valore del parametro attuale, ma è un riferimento alla variabile originale (parametro attuale) nell ambiente della funzione chiamante quindi, ogni modifica fatta al parametro formale, in realtà viene effettuata sul parametro attuale della funzione chiamante (le modifiche fatte dall ambiente chiamato si propagano all ambiente chiamante) Programmazione - Michele Colajanni, 2006/
6 Passaggio parametri per riferimento in C Il passaggio per riferimento è disponibile in molti linguaggi di alto livello (Pascal, C++), ma non in tutti. In particolare, NON è disponibile in C, e quindi deve essere simulato tramite l uso di puntatori Programmazione - Michele Colajanni, 2006/ Implicazioni del passaggio per riferimento Poiché passare un parametro per riferimento comporta la capacità di inserire indirizzi di variabili nel record di attivazione delle funzioni, gestire il passaggio per riferimento implica la capacità di accedere, direttamente o indirettamente, agli indirizzi delle variabili In particolare, occorre essere capaci di: ricavare l indirizzo di una variabile dereferenziare un indirizzo di variabile, ossia recuperare la variabile dato il suo indirizzo Programmazione - Michele Colajanni, 2006/
7 Implicazioni del passaggio per riferimento in C Nei linguaggi che offrono il passaggio per riferimento, i due passi (ricavare e dereferenziare indirizzi) vengono effettuati dal supporto del linguaggio in modo trasparente all utente Quindi, l utente non manipola direttamente indirizzi: è la macchina virtuale del linguaggio a farlo La barriera di astrazione del linguaggio di alto livello viene mantenuta, mentre questo non è possibile nei linguaggi che non supportano ufficialmente il passaggio per riferimento Programmazione - Michele Colajanni, 2006/ E se il linguaggio non lo offre? Se un linguaggio non offre il passaggio per riferimento, l unica possibilità per realizzarlo è di poter manipolare direttamente gli indirizzi delle variabili Il programmatore DEVE CONOSCERE e MANIPOLARE entità che NON sono proprie del linguaggio di alto livello, ma della macchina sottostante. La barriera di astrazione del linguaggio di alto livello viene PERFORATA! Questa mancanza è definitiva, se il linguaggio non consente comunque di accedere alla macchina sottostante Questa mancanza può essere colmata, se il linguaggio è conscio di questa sua mancanza e quindi prevede un modo per perforare la barriera di astrazione Programmazione - Michele Colajanni, 2006/
8 Linguaggi a confronto 1. Un linguaggio che offre il passaggio per riferimento consente di non perforare la barriera di astrazione della macchina ad alto livello (cioè evitare di vedere la memoria ) 2. Un linguaggio che non offre il passaggio per riferimento e non offre strumenti per perforare la barriera di astrazione, non può avere il passaggio di parametri per riferimento 3. Un linguaggio che non offre il passaggio per riferimento ma offre strumenti per perforare la barriera di astrazione, può emulare il passaggio di parametri per riferimento facendo ricadere sul programmatore (esperto) il peso di conoscere e manipolare entità della macchina sottostante (in questo caso, la memoria) Programmazione - Michele Colajanni, 2006/ Il linguaggio C usa i puntatori Il C fornisce due operatori per agire sulla macchina sottostante: l operatore estrazione di indirizzo, & l operatore di dereferenziamento, * Se x è una variabile, &x denota l indirizzo in memoria centrale di tale variabile: &x a Se a è l indirizzo in memoria centrale di una variabile, *a denota tale variabile: *a x Programmazione - Michele Colajanni, 2006/
9 STACK Si riconsideri la funzione scambia void scambia(int *Q, int *P) int t; t = *Q; *Q = *P; *P = t; Stampa int x = 12, y = 27; printf( x=%d y=%d\n, x, y); x=12 y=27 scambia(&x, &y); printf( x=%d y=%d\n, x, y); x=27 y=12 La funzione chiamante deve passare degli indirizzi come parametri attuali La funzione deve specificare che: - si aspetta degli indirizzi (da inserire in puntatori) - deve dereferenziare tali puntatori ogni volta che li usa per accedere ad una variabile Si noti che l onere della gestione del passaggio dei parametri per riferimento in C ricade sul programmatore! Programmazione - Michele Colajanni, 2006/ Record di attivazione di scambia corretta void scambia(int *Q, int *P) int t; t = *Q; *Q = *P; *P = t; int x = 12, y = 27; printf( x=%d y=%d\n, x, y); scambia(&x, &y); printf( x=%d y=%d\n, x, y); Q P t x y Attenzione: Q=P non è errato, ma avrebbe un effetto molto diverso a b ritorno main ritorno S.O a b 12 Link main record di attivazione di scambia() record di attivazione di Programmazione - Michele Colajanni, 2006/
10 Capire bene la scanf() La scanf() è una funzione NON un comando che modifica il valore del parametro passato. Quindi, serve il passaggio per riferimento: int a; scanf ( %d, &a); Al contrario, la printf() è una funzione che non modifica il valore del parametro passato, ma legge solo il contenuto della variabile da stampare Programmazione - Michele Colajanni, 2006/ Esercizio 1 (Specifica) Data una temperatura, espressa in gradi Celsius oppure Fahrenheit, scrivere una procedura di conversione che calcoli sia il corrispondente valore espresso in Fahrenheit, sia quello espresso in Celsius Programmazione - Michele Colajanni, 2006/
11 Esercizio 1 (Idea e Algoritmo) Dato il valore t espresso nella scala s, calcola il corrispondente valore f convertito in gradi Fahrenheit ed il corrispondente valore c convertito in gradi Celsius La funzione deve restituire 2 risultati, quindi non si può utilizzare il return Programmazione - Michele Colajanni, 2006/ Esercizio 1 (Programma) void convert (float t, char s, float *f, float *c) const float F1=9.0, F2=5.0, SH=32.0; if (s== F ) *f = t; *c = F2/F1*(t-SH); else *c = t; *f = SH+t*F1/F2; float temp_input, celsius, fahrenheit; char T; scanf( %d, &temp_input); scanf( %c, &T); convert(temp_input, T, &fahrenheit, &celsius ); printf( Fahrenheit=%lf Celsius =%lf\n, fahrenheit, celsius); Programmazione - Michele Colajanni, 2006/
12 Attenzione: Effetti collaterali (veri) float a, b; float R (float* x) *x=*x+*x; return(*x); a=1.0; b=2*r(&a); printf( %f\n,b); a=1.0; b=r(&a)+r(&a); printf( %f\n,b); Stampa 4 6 Programmazione - Michele Colajanni, 2006/ Effetti collaterali (apparenti) float a, b; float R1 (float* x) return (*x+*x); a=1.0; b=2*r1(&a); printf( %f\n,b); a=1.0; b=r1(&a)+r1(&a); printf( %f\n,b); Nel caso precedente (R) si ha un effetto collaterale indesiderato. In questo caso (R1) non si ha effetto collaterale in entrambi i casi viene stampato 4 MOTIVO: L effetto collaterale si può avere solo se il parametro attuale è passato per indirizzo e all interno della funzione il parametro formale subisce delle modifiche. Programmazione - Michele Colajanni, 2006/
13 Funzioni (Passaggio di vettori come parametri) Radiografia dei vettori in C In C un vettore è organizzato come un puntatore costante, inizializzato a puntare ad un area di memoria opportunamente preallocata Il nome del vettore, v, rappresenta in realtà l indirizzo iniziale dell area di memoria associata, e vale l identità: v & v[0] Programmazione - Michele Colajanni, 2006/
14 Conseguenze Il fatto che il nome del vettore indichi non il vettore in sé, ma l indirizzo iniziale dell area di memoria a lui associata ha una importante conseguenza: in C non esiste modo di indicare un vettore come un tutt uno per cui è impossibile operare su vettori intesi nella loro globalità CONSEGUENZE E impossibile che una funzione restituisca un vettore Passare un vettore come parametro a una funzione non significa passare l intero vettore! Programmazione - Michele Colajanni, 2006/ Passaggio di vettore come parametro Esempio int findmax(int v[ ], int n) CHIAMATA: int A[4]; max = findmax(a,4); Poiché il nome del vettore rappresenta l indirizzo iniziale dell area di memoria associata, quando si passa un vettore ad una funzione non si copia l intero vettore, si copia solo il indirizzo della sua prima locazione! In pratica, i vettori sono automaticamente passati per riferimento Programmazione - Michele Colajanni, 2006/
15 Conseguenza 1 Se i vettori sono passati come parametri per riferimento, la funzione può modificarne i contenuti Se questo rischio o opportunità si vuole evitare, bisogna usare la forma: const int v[ ] Es. int findmax(const int v[ ], int n) Programmazione - Michele Colajanni, 2006/ Conseguenza 2 Se quello che viene passato, in realtà, è solo l indirizzo iniziale del vettore, nell intestazione della funzione si può sostituire la notazione a vettore <tipo> nomevettore[] con la notazione a puntatore: <tipo> *nomevettore? SI! Questo non cambia assolutamente nulla in ciò che la macchina virtuale C fa: rende solo più esplicito ciò che accadrebbe comunque! Programmazione - Michele Colajanni, 2006/
Tempo di vita e scope delle variabili
Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):
DettagliUna procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi " non c#è tipo di ritorno!
Una procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi non c#è tipo di ritorno! void void p(int ) { = * 2; printf( %d, ); Una procedura è un componente
DettagliFunzioni in C. Architetture multi-componente
Funzioni in C Architetture multi-componente In generale, una applicazione informatica complessa è organizzata come insieme di componenti software che cooperano per raggiungere un fine comune. Ogni componente
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliParametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi
Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può
DettagliRecord di Attivazione
Record di Attivazione La macchina virtuale Record di attivazione di funzioni e procedure Record di attivazione 1 LA MACCHINA VIRTUALE DEL C MODELLO A TEMPO DI ESECUZIONE Aree di memoria: Area del codice
DettagliFUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE
FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione
DettagliIntroduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliProgrammazione (imperativa)
Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00
DettagliPOINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.
POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.
DettagliFunzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
DettagliLezione 11. Tipo derivato riferimento Passaggio per riferimento Parametri di ingresso e/o uscita
Lezione 11 Tipo derivato riferimento Passaggio per riferimento Parametri di ingresso e/o uscita Programmazione I Paolo Valente - 2016/2017 2 Esercizio Scrivere una funzione tramite la quale sia possibile
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliParametri Formali di una Funzione e Record di Attivazione
Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali
Dettagliparametri attuali ricopiati parametri formali
Passaggio per valore Al momento del richiamo della funzione il valore dei parametri attuali sono ricopiati nello spazio di memoria allocato ai parametri formali Passaggio per valore int x, y; x=5; y=f(x);
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
DettagliAssembly (3): le procedure
Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 13 1/23 Chiamata
DettagliProgrammazione Procedurale in Linguaggio C++
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
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliLinguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
DettagliIl linguaggio C funzioni e puntatori
Salvatore Cuomo Il linguaggio C funzioni e puntatori Lezione n. 8 Parole chiave: Linguaggio C, procedure, funzioni. Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email
DettagliFunzioni. (Dichiarazione, Prototipo, Chiamata) Concetto di funzione
Funzioni (Dichiarazione, Prototipo, Chiamata) Concetto di funzione L astrazione di funzione è presente in tutti i linguaggi di programmazione di alto livello. Una funzione è un componente software che
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliLinguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Puntatori a funzioni 1 Funzioni che restituiscono puntatori Il valore di ritorno restituito da una funzione può essere di qualsiasi tipo, compreso il tipo puntatore.
DettagliLinguaggio C - le strutture di controllo: sequenza, selezione, iterazione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliI puntatori (richiamo)
I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliIndirizzi e tipi puntatore a
Linguaggio C Indirizzi e tipi puntatore a Università degli Studi di Brescia Prof. Massimiliano Giacomin Indirizzo e tipo puntatore a TIPO Indirizzo NOME Valore Indirizzo 0101011110011001 1101011110011111
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliOttenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
DettagliI vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.
I vettori in C Sintassi della definizione Definizione di costanti Operazioni di accesso Vettori Definizione di vettori in C I vettori in C Definizione di vettori in C Definizione di vettori in C Stesse
DettagliScope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano
Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliEsercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
DettagliVerso i puntatori: Cosa è una variabile?
Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per
DettagliIl sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.
Sistema C e organizzazione del codice Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Un programma C è costituito da un insieme
DettagliFondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
DettagliI puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.
Puntatori I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. NOTA: quando un programma viene mandato in esecuzione, ad esso viene assegnata un area di memoria di lavoro
DettagliPuntatori. Fondamenti di Programmazione
Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale
DettagliLa gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
DettagliPROCEDURE. Una procedura permette di. void p(int x) { x = x * 2; printf( %d, x); }
PROCEDURE Una procedura permette di dare un nome a una istruzione rendendola parametrica non denota un valore, quindi non c è tipo di ritorno void void p(int x) { x = x * 2; printf( %d, x); } 1 PROCEDURE
DettagliL'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
Dettaglinome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti
Università di Roma Tor Vergata L9-1 Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti utilizzare il valore restituito quanti argomenti
DettagliArray k-dimensionali
Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliPuntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a
Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime
DettagliProgrammazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
DettagliLinguaggio C: le funzioni. Introduzione e sintassi
ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni
DettagliArray e puntatori in C
Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di
DettagliEsercizio 1. Tavola ordinata in memoria centrale
Esercizio 1. Tavola ordinata in memoria centrale E dato un programma che realizza una rubrica telefonica come tavola in memoria centrale. In particolare, ogni elemento della tavola è caratterizzato dalle
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
DettagliArray. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliFondamenti di Informatica
Strutture di dati Fondamenti di Informatica 11. Linguaggio C - Strutture / Tabelle / Puntatori Strutture /Tabelle Corso di Laurea in Ingegneria Informatica e dell Automazione A.A. 2012-2013 2 Semestre
DettagliPolitecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA
Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME 13 novembre 2006 RIGA COLONNA MATRICOLA Il presente plico pinzato, composto di sei fogli, deve
DettagliPrimi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
DettagliAssociazione Variabile-Indirizzo
I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliESERCIZIO: Lettura/Scrittura Array
ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti
DettagliPuntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliSpazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - pietro.dilena@unibo.it // The function name says it all int stack_overflow (){
DettagliIl linguaggio C. Puntatori e Array
Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si
DettagliGli Array. Dichiarazione di un array
Gli Array Un array rappresenta una variabile indicizzata (ovvero contenente un indice) che viene utilizzata per contenere più elementi dello stesso tipo. Ogni array ha un nome al quale viene associato
DettagliTipi di dato semplici
Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma
DettagliIl C nel C++: Funzioni
Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma
DettagliIntroduzione. Le funzioni in C. Funzioni. Cosa succede
Introduzione Le funzioni in C DD Cap.5 pp.131-160 KP Cap.5 pp. 175-199 La maggior parte dei programmi scritti per risolvere problemi sono (molto!) più lunghi di quelli visti fin ora. Il modo migliore per
DettagliIl puntatore. Il puntatore
Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliSubroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
DettagliSubroutine in linguaggio macchina: collegamento e passaggio dei parametri
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
DettagliPassaggio parametri puntatore
Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it
DettagliPuntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliLe funzioni. Fondamenti di programmazione
Le funzioni Fondamenti di programmazione Moduli I programmi sono spesso abbastanza complessi da dover essere scomposti in pezzi più maneggevoli Un modulo consiste di istruzioni per svolgere un certo compito
DettagliDefinizione di metodi in Java
Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un
DettagliStrutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
DettagliLinguaggio C I puntatori
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C I puntatori 2001 Pier Luca Montessoro - Davide Pierattoni
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliAllocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
DettagliInside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays
Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una
DettagliLinguaggio C: le funzioni. Introduzione e sintassi
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Introduzione e sintassi La presente dispensa
DettagliProgrammazione di base
Fondamenti di Informatica Testo A Secondo Appello 016-17 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene
DettagliLezione 8. Sottoprogrammi
Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in
DettagliLe procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)
Le procedure L insieme delle istruzioni (4) Architetture dei Calcolatori (lettere A-I) In ogni linguaggio di programmazione si struttura il proprio codice usando procedure (funzioni, metodi, ) L utilizzo
DettagliMini-dispensa sui puntatori in C
Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliVariabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliFondamenti di Informatica T. Linguaggio C: Stack e Ricorsione
Linguaggio C: Stack e Ricorsione FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione: si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
Dettagli