Grammatica di base: Pointers



Documenti analoghi
Grammatica di base: esempio

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Le classi. Classi derivate

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

costruttori e distruttori

Funzioni in C. Violetta Lonati

INFORMATICA - I puntatori Roberta Gerboni

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

I puntatori e l allocazione dinamica di memoria

Allocazione dinamica della memoria - riepilogo

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Introduzione al Linguaggio C

La struttura dati ad albero binario

Record in C: il costruttore struct.

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Fondamenti di Informatica 2

Sottoprogrammi: astrazione procedurale

Inizializzazione, Assegnamento e Distruzione di Classi

Il tipo di dato astratto Pila

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Visibilità dei Membri di una Classe

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Le stringhe. Le stringhe

Appello di Informatica B

puntatori Lab. Calc. AA 2007/08 1

Codifica: dal diagramma a blocchi al linguaggio C++

Connessione ad internet

Esame del 3 febbraio 2010

Le variabili. Olga Scotti

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

dall argomento argomento della malloc()

RICERCA DI UN ELEMENTO

Concetto di Funzione e Procedura METODI in Java

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Introduzione alla programmazione in C

Progettazione : Design Pattern Creazionali

strutturare dati e codice

Corso di Fondamenti di Informatica

Laboratorio di programmazione

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Breve riepilogo della puntata precedente:

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo


Prova Scritta del 19/07/10

Gestione dei File in C

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Introduzione al MATLAB c Parte 2

Linguaggio C - Funzioni

Lezione 9: Strutture e allocazione dinamica della memoria

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Calcolare il massimo di una lista

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Linguaggio C - Stringhe

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Esercizio: gestione di un conto corrente

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Struttura di un programma Java

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

La classe std::vector della Standard Template Library del C++

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Introduzione al linguaggio C Gli array

Oggetti Lezione 3. aspetti generali e definizione di classi I

Introduzione alla Programmazione ad Oggetti in C++

Corso di Informatica

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Indice. Materiale di riferimento. Struttura di un programma in C++ Introduzione al C++ (CAP 1) Alberto Garfagnini e Marco Mazzocco A.A.

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Algoritmi e Strutture Dati

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

GESTIONE INFORMATICA DEI DATI AZIENDALI

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Uso di librerie preconfezionate. pezzi di programma già scritto da altri; di solito ben collaudati;

10 - Programmare con gli Array

Fondamenti di Informatica T. Linguaggio C: i puntatori

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

Esempi di algoritmi. Lezione III

La gestione della memoria

Proff. Fabio Ciao e Raffaele Bortone

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Definizione di nuovi tipi in C

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione 10. Strutture ed Enumerazioni. Allocazione dinamica di memoria

Transcript:

Grammatica di base: Pointers Esistono I puntatori a funzioni. Bisogna esplicitare esattamente il tipo di ritorno e il tipo di argomento. Per evitare ambiguità con il prefisso * nel declarator, il nome e l operatore va incluso tra parentesi tonde: int *dn (int); // Funzione che ritorna un puntatore ad un intero ed ha come argomento un intero int (*dn)(int); // Puntatore ad una funzione che ritorna un intero ed ha come argomento un intero F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 63

Grammatica di base: Pointers Si può applicare & al nome o usare il nome direttamente: int do_nothing(int a); int (*dn) (int); int main() { int a=2; dn=&do_nothing; dn=do_nothing; return dn(a); } Molto utili per definire menù usando array di funzioni: typedef void (*FILE ) (); FILE edit_ops[]={&cut,&paste,&copy,&search FILE file_ops[]={&open,&append,&close,&write FILE *button2=edit_ops; FILE *button3=file_ops; button2[2](); F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 64

Grammatica di base: References Reference Una reference è un nome alternativo per un oggetto. La notazione: T& vuol dire: reference a T int i=2: int &ref=i: int a=ref; ref=2; Per assicurarsi che la reference punti a qualche cosa è obbligatorio inizializzarla: int i=0; int & ref=i; //Permesso int & ref: // Non è permesso, non punta a niente, non è inizializzata extern int &ref2; // Permesso, deve essere inizializzata da qualche altra parte. Non ci sono operatori che operino direttamente sulla reference: ref++; // Somma +1 all oggetto puntato dalla reference Viene utilizzata per passare parametri che possono essere modificati, a funzioni o per tipi di ritorno di operatori. Per migliorare la leggibilita dei programma e preferibile usare puntatori piuttosto che reference, negli argomenti delle funzioni. F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 65

Grammatica di base: References void modify_it(int &a){a++;} void f(){ int x=1; modify_it(x); // Non si capisce che x viene modificata } int incr(int a) {return a+1;} void sum_it(int *a){ (*a)++;} void f(){ int x=1; x=incr(x); // x=2 sum_it(&x); // x=3, si capisce che viene modificata perchè si passa il puntatore } F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 66

Funzionalità avanzate: Tipi aggregati Le strutture. Un array è un aggregato di tipi tutti uguali. Una struttura: struct, è un aggregato di tipi diversi. struct studente { char * name; int anno_dott; bool buoni_e_cattivi; bool corso_cpp; Si dichiara come gli altri tipi, usando il nome della definizione: studente f_cafagna; F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 67

Funzionalità avanzate: Tipi aggregati Si inizializza come i vettori: studente f_cafagna={ Francesco Cafagna,1,TRUE,TRUE Come posso accedere ai membri individuali di una struttura? Si usa l operatore :. (punto) std::cout << f_cafagna.name << std::endl; E se usassi un puntatore ad una struttura? Al punto va sostituito l operatore: -> (structure pointer dereference) void Print_student_name( studente *s){ std::cout << s->name << std::endl; } Attenzione al ; F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 68

Funzionalità avanzate:tipi aggregati È possibile assegnare strutture, passarle come argomenti e ritornarle come risultati di una funzione Non sono definite a priori le operazioni, vanno definite Il nome di un tipo si può usare appena diventa disponibile: struct test { test* prova; test* riprova; Perchè non è possibile scrivere: struct test { test prova; test riprova; F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 69

Funzionalità avanzate:tipi aggregati E questo : struct prova2; struct test{ prova2 sbagliato; test *corretto; F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 70

Funzionalità avanzate: Tipi aggregati Unions. Sono struct i cui membri hanno tutti lo stesso indirizzo di memoria. Le dimensioni saranno quelle del membro più grande: union test { char* t; int s; test prova; prova.t= y ; std::cout << prova.s << std::endl; F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 71

Funzionalità avanzate:tipi aggregati In C++ si possono usare unions anonime: struct esempio{ char *name; My_type t; union { char *s; int t; F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 72

Funzionalità avanzate: function overloading Spesso diamo alle funzioni nomi differenti ma effettuano le stesse operazioni su tipi diversi. Dare lo stesso nome ad operazioni effettuate su tipi diversi è detto: overloading. Secondo voi come fa l operatore + ad operare su diversi tipi chiamandosi nello stesso modo? void Voglio_la_millefoglie(fragole *f); void Voglio_la_millefoglie(frutti_di_bosco *f); void Voglio_la_millefoglie(cigliege *f); void Voglio_la_millefoglie(pesche *f, bool no_chantilly); F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 73

Funzionalità avanzate: Templates Il C++ supporta il generic programming, ovvero permette che un tipo sia usato come parametro di una classe o una funzione: template<class T> struct Pere{ T variabile_generica; T* puntatore_generico; template<class C> C do_nothing(c a){ return a++;} Si possono definire funzioni template overloaded: template<class T> T sqrt(t); template<class T> complex<t> sqrt(complex<t>); F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 74

Funzionalità avanzate: Templates Come si instanziano? Pere <int> kaiser; int a; do_nothing(a); Un template può usare parametri: template <class S, int n> struct Pere{ S v[n]; Pere<int,5> Williams; Parametri possono essere: costanti, address di oggetti o funzioni esterne, o puntatori a membri non-overloaded. F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 75

Funzionalità avanzate: S(T)L Il C++ viene fornito con una Standard Library. la Standard Library viene definita nel namespace std, e contiene strumenti per: Run-time language support (typeid, memory operation, etc.) La C standard library (printf, scanf, etc. ) Stringhe e I/O streams (string, cout, cin, etc.) Supporto per calcolo numerico (complex, etc.) Contenitori (Containers) ed algoritmi che li utilizzano (vector, list, map, iterator, for_each, etc.) Utilizza pesantemente I templates F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 76

Funzionalità avanzate: S(T)L Abbiamo già usato la libreria per I/O: iostream cout: definisce un output per ogni tipo; cin: definisce un input per ogni tipo; Si specializza per I/O su file usando: fstream,ofstream, ifstream Su stringhe: sstream, istringstream, ostringstream Contenitori: vector : array dinamico. Non ha dimensione fissa. Templates. vector <int> caf; for(int a=0;a<10;++a){ caf.push_back(a); } std::cout << Dim. : << caf.size() << std::endl; Templates Dinamico. Cresce alla bisogna Chiedo al vector le dimensioni F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 77

Funzionalità avanzate: S(T)L È possibile navigare in un vettore usando l operatore: [] vector<pere> kayser; for(int i=0; i< kayser.size; ++i) do_nothing(kayser[i]); È possibile navigare in un vettore usando degli: iteratori. Oggetti che sanno come spostarsi in un vettore: vector<pere> kayser; for(vector<pere>::const_iterator i=kayser.begins(); i!= kayser.end(); ++i) do_nothing(*i); F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 78

Funzionalità avanzate: S(T)L Facciamo un pò di esempi: test_union F.S. Cafagna, Linguaggi di programmazione avanzati: C++, XXII ciclo 79