Introduzione agli Array in C++. Argomenti trattati: decadimento a puntatore di un array; conseguenze del meccanismo di decadimento sul passaggio di array a funzioni; array multidimensionali e il concetto di puntatore ad array; come passare array multidimensionali a funzioni; gli iteratori come generalizzazione di un puntatore ad elemento di un array ed una breve scorsa di come usare gli iteratori con gli algoritmi standard (e.g., std::copy) del C++.
Introduzione al concetto di oggetto nel modello della memoria del C++ e ai suoi possibile tempi di vita (temporaneo, automatico, dinamico, ...). Relazione tra il tempo di vita e la visibilità (scope) di un oggetto. Gestione degli oggetti dinamici per tipi primitivi, strutture e array mediante l'utilizzo di puntatori (raw pointers).
Introduzione agli Array in C++. Argomenti trattati: decadimento a puntatore di un array; conseguenze del meccanismo di decadimento sul passaggio di array a funzioni; array multidimensionali e il concetto di puntatore ad array; come passare array multidimensionali a funzioni; gli iteratori come generalizzazione di un puntatore ad elemento di un array ed una breve scorsa di come usare gli iteratori con gli algoritmi standard (e.g., std::copy) del C++.
Introduzione al concetto di oggetto nel modello della memoria del C++ e ai suoi possibile tempi di vita (temporaneo, automatico, dinamico, ...). Relazione tra il tempo di vita e la visibilità (scope) di un oggetto. Gestione degli oggetti dinamici per tipi primitivi, strutture e array mediante l'utilizzo di puntatori (raw pointers).
Introduzione ai puntatori e ai riferimenti in C++. Viene presentato il problema dello swap, come esempio motivante per l'introduzione della semantica di riferimento. Si procede con l'introduzione del concetto di puntatore, a cui segue una spiegazione dei basilare operatori di referenziazione e dereferenziazione. Il problema dello swap viene risolto mediante puntatori. Si procede con l'introduzione dei riferimenti, come alias di variabili esistenti. Il problema dello swap viene in ultimo risolto mediante riferimenti.
Introduzione ai puntatori e ai riferimenti in C++. Viene presentato il problema dello swap, come esempio motivante per l'introduzione della semantica di riferimento. Si procede con l'introduzione del concetto di puntatore, a cui segue una spiegazione dei basilare operatori di referenziazione e dereferenziazione. Il problema dello swap viene risolto mediante puntatori. Si procede con l'introduzione dei riferimenti, come alias di variabili esistenti. Il problema dello swap viene in ultimo risolto mediante riferimenti.
Queste slide dal titolo provocatorio cercano di dare l'idea che la stupidità e la pigrizia possono avere un effetto positivo nela programmazione per la ricerca di soluzioni semplici. Nello specifico caso parliamo di funzioni in C
2. Cosa sono i puntatori?
I puntatori sono delle variabili che contengono un indirizzo di un'altra variabile (detta variabile puntata).
Si dichiarano in questo modo :
int * p; // p é una variabile puntatore di tipo intero
Normalmente per qualsiasi variabile, purché non sia un puntatore, il suo indirizzo viene generato
casualmente durante l'esecuzione del programma. Quindi non é possibile assegnare un indirizzo ad un
puntatore tranne che per due casi :
Assegno l'indirizzo del puntatore a NULL
int * a = NULL ; a = new int ; // a é una variabile puntatore di tipo intero che
ha come indirizzo NULL
// l'operatore new alloca spazio in memoria
Assegno l'indirizzo del puntatore ad una variabile
int * a ; int ind ; a = & ind
// in questo caso a é sempre una variabile puntatore e assegnerò con l'operatore & l'indirizzo della
variabile chiamata ind
3. Funzioni che restituiscono un
puntatore e Puntatori a funzione
Una funzione può restituire un puntatore.
Esempio : int * funz(); // dichiaro una funzione che restituirà un
// puntatore a int
Puntatori a funzione
In C ++ Esistono i puntatori a funzione. Servono nel caso un programma dovesse
aver la necessità di scegliere tra più funzioni. Quindi, in questo caso gli indirizzi
delle funzioni da chiamare non vengono risolti al momento della compilazione.
int * (* punt_funz) (char * ); // dichiaro un puntatore a funzione
punt_funz che restituirà un puntatore a int e ha un argomento, che é un
puntatore a char
4. Array Statici
Gli array (o vettore) è un'insieme di variabili che occupano spazi consecutivi
in memoria e appartengono tutti allo stesso tipo.
viene dichiarato in questo modo : int vett[5]; // dichiaro un array di nome
// vett e di dimensione 5
Il vettore sono dei puntatori con delle caratteristiche in più:
Quando dichiaro un array:
Alloco spazio in memoria sia per il puntatore di nome vett
Alloco spazio in memoria per l'area puntata di ci viene specificata la
lunghezza.
L'indirizzo dell'array viene inizializzato con l'indirizzo dell'area puntata (il
primo elemento dell'array).
5. Array Dinamici
Un array dinamico è un vettore la cui dimensione può essere stabilita run-time,
cioè in fase di esecuzione del programma. Un esempio di un vettore
dinamico in C++ è il seguente:
double *x; //questa istruzione dichiara x come puntatore a double
cout<<"Di quanti elementi hai bisogno? ";
cin>>dim;
x = new double[dim];
x[0]=10;
x[1]=12;
...