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;

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Introduzione al linguaggio C++
Introduzione al linguaggio C
Puntatori in C e C++.
PUNTATORI Introduzione
Un nuovo tipo di dati Gli array.
Fondamenti di Informatica Prof. Cantone
Programmazione Procedurale in Linguaggio C++
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Process synchronization
Allocazione dinamica della memoria
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 III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
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 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 IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
eliana minicozzi linguaggi1a.a lezione2
LdL - LP1 - ver. 6 - lez aa Linguaggi di programmazione I La ricorsione Prof. Luigi Di Lascio Lezione 10.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
8) Classi numeriche e operatori Lab. Calc. I AA2002/03 - cap.82 Classi numeriche Esempi di classi numeriche: int, numeri interi che occupano una parola.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Funzioni. Lab.Calc. AA 2005/062 Astrazione Consiste nell'ignorare i dettagli e concentrarsi sull'essenziale: in particolare ci consente di utilizzare.
Iterazioni (for, do, while). Lab.Calc. AA2005/062 Iterazioni 3 istruzioni che consentono di eseguire un loop (ciclo): 1. while 2. do...while 3. for con.
Creazione di un programma eseguibile. Laboratorio di Calcolo AA2005/062 Livelli di programmazione Si può programmare a diversi livelli utilizzando linguaggi.
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
Istruzioni di selezione (If/else/switch)
Vettori e matrici. Lab.Calc. AA2005/062 Vettori Dichiarazione di un vettore di oggetti del tipo Tipo: Tipo identificatore[dimensione]; Uso di un elemento.
Primi Elementi di Programmazione in C++
1 laboratorio di calcolo II AA 2003/04 seconda settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
Il Linguaggio C.
Le funzioni.
Algoritmi e Programmazione Avanzata
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.
Programmazione in Java
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.
void binario(int n); …………………
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
Passaggio di parametri per indirizzo
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
LdL - LP1 - lez 11 - ver 6 - aa Linguaggi di programmazione I Stringhe (II) Prof. Luigi Di Lascio Lezione 11.
CORSO DI PROGRAMMAZIONE II Lezione 22
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.
Vettori (a una dimensione)
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
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
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.
© Piero Demichelis Tipi strutturati I tipi considerati finora hanno la caratteristica comune di non essere strutturati: ogni elemento è una singola entità.
Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Stringhe Una stringa è un vettore di char con un carattere costante \0 che indica la fine della stringa il terminatore rende differenti gli array di char.
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:

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;

Lab. Calc. AA 2005/063 Indirizzo Consideriamo la dichiarazione con inizializzazione: string name="My Name"; Questa definisce un oggetto con attributi identificatore: name tipo: string valore:"My Name" indirizzo:&name, noto solo dopo che il codice compilato sia stato caricato in memoria

Lab. Calc. AA 2005/064 Puntatori I puntatori sono oggetti di tipo int usati per memorizzare gli indirizzi di altri oggetti (che possono essere a loro volta interi ma anche char, double, string, o di qualunque altro tipo o classe). I puntatori vengono utilizzati per allocare e deallocare la memoria durante la fase di esecuzione del programma, ovvero dinamicamente.

Lab. Calc. AA 2005/065 Dichiarazione di un puntatore Un puntatore ad un oggetto intero si definisce con: int * p_int; Un puntatore ad un oggetto double si definisce con: double * p_double; Un puntatore ad un oggetto di tipo mio_oggetto si definisce con: mio_oggetto * p_mio; La posizione di * è irrilevante, posso scrivere anche mio_oggetto *p_mio;

Lab. Calc. AA 2005/066 Sintassi tipo * identificatore; // identificatore è un puntatore ad un oggetto // di tipo tipo (tipo o classe qualsiasi) tipo lvalue = *identificatore; // in questa espressione il contenuto della locazione // di memoria che ha come indirizzo identificatore // viene copiato nell'oggetto lvalue.

Lab. Calc. AA 2005/067 In C++ puntatori e indirizzi sono sinonimi int numero = 82485; // un oggetto intero a 32 bit // che in binario si scrive // int * puntatore; // puntatore ad un oggetto intero puntatore = № // puntatore a numero // (posto uguale all'indirizzo di numero) Uso dei puntatori

Lab. Calc. AA 2005/068 0x x puntatore numero

Lab. Calc. AA 2005/069 Vettori e puntatori int a[25]; a è un puntatore a interi double x[25];x è un puntatore a double char ch[25];ch è un puntatore a char mentre a[0], x[5] o ch[10] sono rispettivamente un intero, un double ed un char.

Lab. Calc. AA 2005/0610 Le dichiarazioni char st[] = "A string"; char *st="A string"; sono equivalenti, infatti: st[0] ha valore 'A', *st ha valore 'A' st[7] ha valore 'g',*(st+7) ha valore 'g' st[8] ha valore '\0', *(st+8) ha valore '\0'

Lab. Calc. AA 2005/0611 Indirizzamento &st[0] è l'indirizzo di st[0], ovvero è la stessa cosa di st &st[1] è l'indirizzo di st[1], ovvero la voce successiva a quella cui punta st, è la stessa cosa di st + 1 &st[k] è la stessa cosa di st + k per ogni k valido

Lab. Calc. AA 2005/0612 Inizializzazione Sappiamo di poter dimensionare e inizializzare un vettore di numeri con la dichiarazione int list[] = {2,3,4,5}; Va però osservato che non è possibile farlo mediante l'istruzione int * plist ={2,3,4,5}; Infatti plist è un puntatore all'indirizzo da cui si iniziano a memorizzare uno o più numeri interi (nel nostro caso 2,3,4 e 5) e non un vettore di interi! list[3] è equivalente a *(plist+3)

Lab. Calc. AA 2005/0613 Esempio Cosa stamperà un programma contenente le seguenti istruzioni? int x = 16; int * intptr ; intptr = &x; *intptr = *intptr + 5; cout << x<<endl;

Lab. Calc. AA 2005/0614 Esempio int x = 16; // x posto uguale a 16 int * intptr ; // intptr è un puntatore a int intptr = &x; // intptr punta a x *intptr = *intptr + 5; // *intptr non è altri che x, quindi x = x +5 cout << x<<endl; // il programma stampa 21

Lab. Calc. AA 2005/0615 Promemoria tipo idOggetto; // definisce idOggetto di tipo tipo tipo * pOggetto; // definisce pOggetto, puntatore ad oggetto di // tipo tipo pOggetto = &idOggetto; // rispettivamente puntatore e indirizzo *pOggetto = idOggetto; // l'oggetto cui pOggetto punta e l'oggetto // idOggetto

Lab. Calc. AA 2005/0616 Argomenti di funzioni In C e C++ esistono due modi principali di passare argomenti a delle funzioni Passaggio by value, si dà l'oggetto come argomento: double sqrt(double a), in questo caso la variabile che viene passata alla funzione viene usata solo in lettura dalla funzione che non la può modificare in alcun modo Passaggio by reference: si dà come argomento un indirizzo (o un puntatore) void swap(double & a, double & b), in questo caso la funzione è abilitata a restituire a e b modificati (infatti li scambia tra di loro)

Lab. Calc. AA 2005/0617 Allocazione dinamica della memoria L'operatore new alloca la quantità di memoria richiesta per un oggetto di tipo o classe tipo e restituisce l'indirizzo dell'area di memoria riservata. Forma generale: new tipo

Lab. Calc. AA 2005/0618 Esempi int * intptr = new int; char * chptr = new char; double * dbptr; dbptr = new double; O anche, nel caso di più oggetti int * intptr; intptr = new int[50];

Lab. Calc. AA 2005/0619 Dimensionamento dinamico int * intptr = new int[50]; è equivalente a int intptr[50]; ma ci sono dei casi, qualora la dimensione di un vettore non sia nota a priori, in cui si può usare solo la prima forma.Possiamo infatti scrivere int n; int * intptr; cin << n; intptr = new int[n]; ma non cin << n; int intptr[n]; // errore!

Lab. Calc. AA 2005/0620 Delete Per liberare memoria allocata dinamicamente si usa la keyword delete, ovvero int * intPtr; intPtr = new int; : delete intPtr;

Lab. Calc. AA 2005/0621 Esempio int * intPtr; intPtr = new int[50]; : delete[] intPtr; // o delete[50] intPtr

Lab. Calc. AA 2005/0622 Errori frequenti 1.Oggetti inacessibili: qualora li si creino con new e ci si perda il puntatore ad essi if(condizione) {int * pint = new int; } // dopo la chiusura di questa parentesi non // posso più usare pint e quindi non posso // accedere all'oggetto, che però non è stato cancellato! 2.Puntatori che non puntino più a nulla: qualora si sia cancellato con delete l'oggetto in memoria e si provi ad utilizzarne il puntatore

Lab. Calc. AA 2005/0623 Regole Il programma deve contenere un'istruzione delete per ogni istruzione new. L'operazione di delete va effettuata alla fine del blocco di codice che ha allocato la memoria, in un punto ben visibile, per essere sicuri di non utilizzare più quel puntatore.