Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
Introduzione al linguaggio C
Puntatori in C e C++.
PUNTATORI Introduzione
Universita di Camerino
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
Anno accademico Array e puntatori in C.
Programmazione Procedurale in Linguaggio C++
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Process synchronization
Laboratorio di Linguaggi lezione IV: tipi definiti dallutente Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione III: tipi base, espressioni, type-cast Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e.
Laboratorio di Linguaggi lezione V: puntatori (1/3) Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
Introduzione alla programmazione lll
Corso di Informatica Applicata Lezione 6
nome: sequenza di caratteri usata per denotare un oggetto
Lab. Calc. AA 2005/061 puntatori. Lab. Calc. AA 2005/062 Attributi di un oggetto nome o identificatore; tipo o classe; valore o valori; indirizzo;
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Dichiarazioni e tipi predefiniti nel linguaggio C
Le funzioni.
AN FI Array Array in Java. AN FI Array Dichiarazione di array in Java [ ]; //oppure u [] ; int a[]; int[] a; u La dimensione non è specificata.
Fondamenti di informatica Linguaggio C Main Program: Architettura di un PC Diagrammi di flusso Linguaggio C.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 6 (Deitel) I vettori Sommario Introduzione Vettori Dichiarazione di vettori 6.4.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Il linguaggio C Puntatori e dintorni.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione II Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 9 e 10 - Segmenti.
Lezione 9 e 10 - Segmenti di memoria e puntatori - Aritmetica dei puntatori - Formattazione dei dati - Significato ed impiego del cast - Tipi di dato strutturato.
Transcript della presentazione:

Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2006/07

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Gli array simile a java… definizione di un nuovo tipo: accesso agli elementi… /* cartella della tombola, contiene 15 numeri*/ int cartella[15]; typedef int Cartella[15]; int main(){ Cartella mia, sua; mia[2]=31; } si usano solo tipi interi per indicizzare. (qui: da 0 a 14) NB: no range checking ! Segmentation faults sempre in agguato. deve essere una costante! (il compil. deve sapere quanti elementi allocare)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Gli array: inizializzazione Inizializzazione di array (opzionale, come sempre) int cartella[15]={ 10,21,33,13,4, 12,4, 53, 1,78, 2,54,31,86,78, }; l'ultima virgola è tollerata int cartella[]={ 10,21,33,13,4, 12,4, 53, 1,78, 2,54,31,86,78, }; se si inizializza un array, allora non è necessario specificare il numero di elementi (li conta il compilatore per noi)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Gli array: inizializzazione Inizializzazione di array: –gli array di caratteri godono di un inizializzatore speciale: –questa inizializzazione... –...si può scrivere equivalentemente così: char nome[]={'m','a','r','c','o',' ','t','a','r','i','n','i',0}; char nome[]= "marco tarini"; ' 't' '\0' nome[ 5] nome[ 6] nome[12] vale la costante char 0. Si può scrivere anche così: Per convenzione, è usato come terminatore delle stringhe: '\0'

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Gli array: storaggio Importante: –in memoria, gli elementi di un array sono memorizzati in una serie di celle contigue –ogni cella ha la stessa grandezza –per questo gli array sono random access! int cartella[5]={ 10,21,33,13,4, }; 10 indirizzo base di "cartella" indirizzo di cartella[3] = (indirizzo base) + 3 x (dimensione cella) cartella[3] dimensione cella (=4)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Problema Cosa succede, se non si sa a priori quanti elementi dovremo allocare? –(a tempo di esecuzione) Necessità allocazione dinamica di array. Per la soluzione di questo (e molti altri) problema, useremo i puntatori

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a E' arrivato il momento de... I PUNTATORI

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: intro Una tipo variabile che contiene un indirizzo di una locazione di memoria: –l'indirizzo di un'altra variabile!

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: sintassi della dichiarazione int* pippo; " pippo " è una var di tipo int *, cioè puntatore ad intero int *pippo; " * pippo " (cioè il valore puntato da pippo) è una var di tipo intero o se preferite:

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: sintassi dell'uso pippo il valore del puntatore. *pippo il valore dell'oggetto puntato. entrambi possono essere sia letti che assegnati (possono comparire da entrambi i lati di un assegnamento)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: preambolo Cosa succede normalmente… int pippo = 0xA0; R A M 0x xFFFFFFFF il compilatore assegna alla variabile pippo una locazione di memoria. Ad esempio, la locazione 0x612A22C Inoltre, riserva quei quattro byte per la variabile pippo. spazio degli indirizzi logici 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 21 2A 02 2C A A3 D0

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: preambolo Cosa succede normalmente… int pippo = 0xA0; pippo = 0x00AABB00; R A M 0x xFFFFFFFF il compilatore assegna alla variabile pippo una locazione di memoria. Ad esempio, la locazione 0x612A22C Inoltre, riserva quei quattro byte per la variabile pippo. spazio degli indirizzi logici 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 21 2A 02 2C A A3 D0 Inoltre variabiletipolocazione pippoint 0x612A22C dopo la complazione STORE 0x0612A22C 0x00AABB00 00 AA BB 00

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: intro Una tipo variabile che contiene un indirizzo di una locazione di memoria: –l'indirizzo di un'altra variabile!

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: sintassi della dichiarazione int* pippo; " pippo " è una var di tipo int *, cioè di tipo "puntatore ad intero" int *pippo; " * pippo " (cioè il valore puntato da pippo) è una espressione di tipo "intero" o se preferite:

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: sintassi dell'uso pippo il valore del puntatore. *pippo il valore dell'oggetto puntato. entrambi possono essere sia letti che assegnati (possono comparire da entrambi i lati di un assegnamento)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a m e m o r i a Puntatori: preambolo Cosa succede normalmente… int pippo; 0x xFFFFFFFF il compilatore assegna alla variabile pippo una locazione di memoria. Ad esempio, la locazione 0x612A22C Inoltre, riserva quei quattro byte per la variabile pippo. spazio degli indirizzi logici 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 21 2A 02 2C A3 D0 Inoltre variabiletipolocazione pippoint 0x612A22C

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Puntatori: significato int* pippo; 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 61 2A 02 1C A A3 D0 variabiletipolocazione pippoint* 0x612A22C indirizzo pippo (il puntatore stesso) vale... *pippo (la variabile puntata da pippo) vale... *pippo pippo m e m o r i a (il puntatore stesso) vale... 0x612A021C (la variabile puntata da pippo) vale... 0x000000A0

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Cambiare il valore del puntatore pippo++; 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 61 2A 02 1C A A3 D0 variabiletipolocazione pippoint* 0x612A22C indirizzo *pippo pippo A pippo *pippo (il puntatore stesso) vale... 0x612A021C (la variabile puntata da pippo) vale... 0x000000A0 m e m o r i a

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Cambiare il valore del puntatore pippo++; 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 61 2A 02 1C A A3 D0 variabiletipolocazione pippoint* 0x612A22C indirizzo *pippo pippo 61 2A pippo *pippo (il puntatore stesso) vale... 0x612A021C (la variabile puntata da pippo) vale... 0x000000A0 0x612A0220 0x1223D2FF m e m o r i a

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Cambiare il valore del valore puntato *pippo = 0x00AABB00; 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A A A3 D0 variabiletipolocazione pippoint* 0x612A22C indirizzo *pippo pippo 61 2A AA BB 00 m e m o r i a

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a I è una costante intera (vale 10) i è una variabile intera ip è un puntatore ad un intero Considerazione sull'efficienza const int I=10; int i; int* ip; STORE 10 0xCC int x;... x = I; x = i; x = *ip; READ TEMP 0xAA STORE TEMP 0xCC compilazione READ TEMP0 0xBB READ TEMP1 TEMP0 STORE TEMP1 0xCC ide.tipolocazione o I int 10 valore i ip int int* --- 0xBB xCC xAA x int tabella dei Simboli del compilatore

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a I è una costante intera (vale 10) i è una variabile intera ip è un puntatore ad un intero Considerazione sull'efficienza: assegnamento const int I=10; int i; int* ip; int x;... I = 15; i = 15; *ip = 15; STORE 15 0xAA compilazione READ TEMP 0xBB STORE 15 TEMP ide.tipolocazione o I int 10 valore i ip int int* --- 0xBB xCC xAA x int tabella dei Simboli del compilatore (le costanti si assegnano solo durante l'inizializzazione)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Considerazione sull'efficienza: esercizio a = *p; a = b; a = 15; *p = 15; *p = b; *p = *p2; accessi alla memoria in scrittura accessi alla memoria in lettura comando

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algebra dei Puntatori L'operazione base sui puntatori: somma con un intero + espressione di tipo puntatore ad un tipo T ( T* ) Semantica: è il puntatore che punta una loc. i elementi (di tipo T ) dopo p; come indirizzo di memoria, è l'indirizzo p + i x (dimensione diT ) p + i

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algebra dei Puntatori Esempi double *p, *q;... q = p + 3; *(p + 3)=2.0; q++; q--; q+=2;

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algebra dei Puntatori IDEONA !! equivalenza puntatori - vettori Brain Kernighan

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algebra dei Puntatori Ripasso: vettori –in memoria, gli elementi di un array sono memorizzati in una serie di celle contigue –ogni cella ha la stessa grandezza –per questo gli array sono random access! int cartella[5]={ 10,21,33,13,4, }; 10 indirizzo base di "cartella" indirizzo di cartella[3] = (indirizzo base) + 3 x (dimensione cella) cartella[3] dimensione cella (=4)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algebra dei Puntatori equivalente a double *p;... p[ 5 ] *(p + 5)