Esempi: Lezione 1

../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ; 
  }
../_images/linea.png

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 ; 
}
../_images/linea.png

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 ;
  }