commit 2e5192afe6356deecf769cdfb4f4dca7aa39399b Author: Alessandro Ferro <49845537+xfarrow@users.noreply.github.com> Date: Thu Mar 18 21:54:45 2021 +0100 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/teoria/a.out b/teoria/a.out new file mode 100755 index 0000000..fe401b0 Binary files /dev/null and b/teoria/a.out differ diff --git a/teoria/allocazioneDinamicaMemoria.cpp b/teoria/allocazioneDinamicaMemoria.cpp new file mode 100644 index 0000000..9206803 --- /dev/null +++ b/teoria/allocazioneDinamicaMemoria.cpp @@ -0,0 +1,44 @@ +#include +using namespace std; +void array(); +void arrayInizializzato(); +void noArray(); + +int main(){ + return 0; +} + +void array(){ + int* ptr = nullptr; + try{ + ptr = new int[5]; + }catch(bad_alloc ex){ // Se non riesce a creare abbastanza memoria viene sollevata un'eccezione + cout<<"Errore allocazione memoria"; + } + + for(int i=0;i<5;i++){ + cout<<"Valore "<>ptr[i]; + } + for(int i=0;i<5;i++){ + cout< +using namespace std; +int main(){ + string s1 = "hello"; + string s2 = "world"; + cout<<"Stringa 1: "< +#include "header.hpp" +using namespace std; +int main(){ + + /* Puntatori */ + + const int x = 5; + const int y = 3; + + const int* p = &x; + //*p = 3; // errore + p = &y; //OK + + const int* const p2 = &x; + //*p2 = 3; //errore + //p2 = &y; //errore + + /* Casting */ + + char c = 'a'; + void* p3 = &c; + //cout<<*p3; //errore (non conosce il tipo) + //cout<<*((char*)p3)<(p3))< +#include "test.hpp" +using namespace std; +int main(){ + cout<<"I'm main"< +#include "test.hpp" +void test(){ + std::cout<<"I'm test"< +using namespace std; + +// prototipi di funzione +void assegnazione(); +void dimensione_puntatore(); +void puntatori_const(); +void casting(); + +int main(){ + casting(); + return 0; +} + +void casting(){ + int i = -1; + int* ptr_int = &i; + /* trasformo il puntatore da puntatore a intero a puntatore a unsigned intero + quindi stamperà 4294967295 perchè interpreta il valore puntato come unsigned */ + cout<<*((unsigned int*)ptr_int)<(ptr_void)); // Il tipo void* può sempre essere castato + //cout<<*(static_cast(ptr_int)); // errore. Non avrebbe dato errore con il cast normale +} + +void puntatori_const(){ + const char carattere_const = 'a'; + char carattere = 'b'; + + /* ----- CONST TYPE* PTR ----- */ + // Se una variabile è const anche il suo puntatore deve esserlo + + // char* ptr = carattere_const; // errore + const char* ptr = &carattere_const; // OK + /* Se un puntatore è const char*, non posso modificare il valore della + variabile, ma posso modificare il valore del puntatore in sè */ + // *ptr = 'z'; //errore + ptr = &carattere; //ok + + /* ----- CONST TYPE* CONST PTR ----- */ + /* const char* const vuol dire che è un puntatore const che non + può neanche modificare il valore del puntatore in sè */ + + const char* const ptr2 = &carattere_const; + // *ptr2 = 'z'; //errore + // ptr2 = &carattere; //errore + + /* ----- TYPE* CONST PTR ----- */ + /* Punta a tipi non-const ma il suo valore non può essere cambiato, + ovvero non può puntare a locazioni diverse rispetto alla dimensione_puntatore + inizializzazione */ + + char* const ptr3 = &carattere; + *ptr3 = 'k'; // OK + char carattere2 = 's'; + //ptr3 = &carattere2; // errore +} + +void dimensione_puntatore(){ + /* la dimensione di un puntatore non dipende dal tipo a cui punta + dato che deve semplicemente essere abbastanza grande per individuare + una cella di memoria */ + + long double* ptr1 = nullptr; + char* ptr2 = nullptr; + + cout< +using namespace std; +void lvalue(); +void rvalue(); +void move(); +int f(); + +int main(){ + //lvalue(); + //rvalue(); + move(); + return 0; +} +void lvalue(){ + /* Il riferimento è come se fosse un puntatore, ma non devo usare la deferenziazione + per accedere al contenuto. è utile quando vogliamo passare dei parametri a puntatore + funzione per riferimento (risparmiando sulla copia) ma senza usare la sintassi + dei puntatori */ + + int var = 7; + int& riferimento = var; + riferimento++; + cout<