Esempi: Lezione 1
Contents
Esempi: Lezione 1¶

1.0 Utilizzo di `sizeof`
¶
/*
c++ -o main_00 main_00.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
std::cout << "Dimensione di un char : " << sizeof (char)
<< " byte" << std::endl ;
std::cout << "Dimensione di un int : " << sizeof (int)
<< " bytes" << std::endl ;
std::cout << "Dimensione di un short int : " << sizeof (short int)
<< " bytes" << std::endl ;
std::cout << "Dimensione di un long int : " << sizeof (long int)
<< " bytes" << std::endl ;
std::cout << "Dimensione di un signed long int : " << sizeof (signed long int)
<< " bytes" << std::endl ;
std::cout << "Dimensione di un unsigned long int : " << sizeof (unsigned long int)
<< " bytes" << std::endl ;
std::cout << "Dimensione di un float : " << sizeof (float)
<< " bytes" <<std::endl ;
std::cout << "Dimensione di un double : " << sizeof (double)
<< " bytes" << std::endl ;
std::cout << "Dimensione di un wchar_t : " << sizeof (wchar_t)
<< " bytes" <<std::endl ;
return 0 ;
}

1.1 Stampa dell’indirizzo di memoria di una variabile¶
/*
c++ -o main_01 main_01.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int numero_intero = 5 ;
std::cout << "valore: " << numero_intero << std::endl ;
std::cout << "indirizzo: " << & numero_intero << std::endl ;
return 0 ;
}

1.2 Puntatori¶
/*
c++ -o main_02 main_02.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int numero_intero = 5 ;
int * puntatore_ad_intero = & numero_intero ;
std::cout << "valore : " << numero_intero << std::endl ;
std::cout << "indirizzo: " << & numero_intero << std::endl ;
std::cout << "puntatore: " << puntatore_ad_intero << std::endl ;
std::cout << "valore : " << * puntatore_ad_intero << std::endl ;
return 0 ;
}

1.3 Uso di puntatori¶
/*
c++ -o main_03 main_03.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int var = 137 ;
std::cout << "var vale: " << var
<< " ed ha indirizzo " << &var << std::endl ;
int * ptr ;
std::cout << "ptr punta a: " << ptr << std::endl ;
ptr = & var ;
std::cout << "Ora ptr punta a var: " << ptr
<< " ed il valore a cui punta vale: " << *ptr << std::endl ;
* ptr = 100 ;
std::cout << "var ora vale: " << var << std::endl ;
int pippo = * ptr ;
std::cout << "La variabile pippo vale: " << pippo << std::endl;
(*ptr)++;
std::cout << "var ora vale: " << var << " e pippo vale: " << pippo << std::endl;
return 0 ;
}

1.4 Puntatore a Puntatore¶
/*
c++ -o main_04 main_04.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int var = 137 ;
int * ptr = & var ;
int ** ptrAptr = & ptr ;
std::cout << "var : " << var << std::endl ;
std::cout << "ptr : " << ptr << std::endl ;
std::cout << " `--> *ptr: " << *ptr << std::endl ;
std::cout << "ptrAptr: " << ptrAptr << std::endl ;
std::cout << " `--> *ptrAptr: " << *ptrAptr << std::endl ;
std::cout << " `-->**ptrAptr: " << **ptrAptr << std::endl ;
return 0 ;
}

1.5 Array e puntatori¶
/*
c++ -o main_05 main_05.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int vec[] = {2, 20} ;
std::cout << vec << std::endl ;
std::cout << vec[0] << " == " << *vec << std::endl ;
std::cout << vec[1] << " == " << *(vec+1) << std::endl ;
return 0 ;
}

1.6 Referenze¶
/*
c++ -o main_06 main_06.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
double pi_greco = 3.1415 ;
double & ref = pi_greco ;
std::cout << "ref fornisce un alias di pi_greco: "
<< ref << std::endl ;
pi_greco = 3.141592 ;
std::cout << "ref fornisce un alias di pi_greco: "
<< ref << std::endl ;
std::cout << & ref << std::endl ;
std::cout << & pi_greco << std::endl ;
return 0 ;
}

1.7 Passaggio di argomenti ad una funzione¶
/*
c++ -o main_07 main_07.cpp
*/
#include<iostream>
int raddoppia (int valore)
{
valore *= 2 ;
return valore ;
}
int raddoppia (int * valore)
{
*valore *= 2 ;
return *valore ;
}
int raddoppiaRef (int & valore)
{
valore *= 2 ;
return valore ;
}
int main (int argc, char ** argv)
{
int numero = 5 ;
std::cout << "raddoppio (valore) " << raddoppia (numero) << "\n" ;
std::cout << "numero: " << numero << "\n" ;
std::cout << "raddoppio (puntatore) " << raddoppia (& numero) << "\n" ;
std::cout << "numero: " << numero << "\n" ;
numero = 5 ;
std::cout << "raddoppio (referenza) " << raddoppiaRef (numero) << "\n" ;
std::cout << "numero: " << numero << "\n" ;
int risultato = raddoppia (numero) ;
return 0 ;
}

1.8 Variabili in output da una funzione¶
/*
c++ -o main_08 main_08.cpp
*/
#include<iostream>
int raddoppiaReturnValore (int valore)
{
int risultato = valore * 2 ;
return risultato ;
}
int * raddoppiaReturnPuntatore (int valore)
{
int risultato = valore * 2 ;
return & risultato ;
}
int & raddoppiaReturnReferenza (int valore)
{
int risultato = valore * 2 ;
return risultato ;
}
int main (int argc, char ** argv)
{
int numero = 5 ;
std::cout << "Valore : " << raddoppiaReturnValore (numero) << std::endl ;
std::cout << "Puntatore: " << raddoppiaReturnPuntatore (numero) << std::endl ;
std::cout << "Referenza: " << raddoppiaReturnReferenza (numero) << std::endl ;
return 0 ;
}

1.9 Allocazione dinamica della memoria¶
/*
c++ -o main_09 main_09.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int * numero = new int (5) ;
std::cout << * numero << std::endl ;
delete numero ;
return 0 ;
}

1.10 Allocazione dinamica in una funzione¶
/*
c++ -o main_10 main_10.cpp
*/
#include<iostream>
int * creaInteroDoppio (int valore)
{
int * risultato = new int (valore * 2) ;
return risultato ;
}
int main (int argc, char ** argv)
{
int numero = 5 ;
int * doppio = creaInteroDoppio (numero) ;
std::cout << "Valore iniziale: " << numero << std::endl ;
std::cout << "Valore doppio : " << *doppio << std::endl ;
delete doppio ;
//utilizzo errato della funzione!
// std::cout << "Valore doppio : " << *creaInteroDoppio (numero) << std::endl ;
return 0 ;
}

1.11 Allocazione dinamica di un array¶
/*
c++ -o main_11 main_11.cpp
*/
#include<iostream>
int main (int argc, char ** argv)
{
int N = 5 ;
float * dynamic_array = new float [N] ;
delete [] dynamic_array ;
return 0 ;
}