Advertisement
buonaseva_fatelo

funzioni_pt2_ptrs_passby_value_ref

Nov 16th, 2023 (edited)
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. /* FUNZIONI pt2.
  2. -INTRO PUNTATORI r8
  3. -OPERATORI '*' e '&' r25
  4. -NOTE VARIE r37
  5. -PASS BY VALUE o BY REFERENCE r54
  6. */
  7. //INTRO PUNTATORI
  8. int main(){
  9.     int variabile = 4;
  10.     int* puntatore_a_variabile; //int* contiene INDIRIZZI a 64 bit (es. 0xFEFEFEFEFEFEFEFE) non int (§)
  11.     puntatore_a_variabile = &variabile; //&variabile NON FA "4"
  12.     cout << "Mi ritrovo un " << variabile
  13.     << " all'indirizzo " << puntatore_a_variabile << endl;
  14.     return 0;
  15. } //OUTPUT: "Mi ritrovo un 4 all'indirizzo 0x7ffde6e5506c"
  16.  
  17. /*
  18. (§):
  19. -è una variabile PUNTATORE che PUNTA SOLO a variabili int
  20. -discorso analogo per char*, float*...
  21. -ignora per ora cosa significhi void*
  22. */
  23.  
  24. //******************************************************************************
  25. //OPERATORI '*' e '&': cosa significano?
  26.  
  27. int *ZIO = 0xDEADBEEF; //ti crasha se lo fai lol
  28. ZIO; //CONTIENE INDIRIZZO a un int
  29. *ZIO; //PUNTA alla var. il cui INDIRIZZO è dentro ZIO
  30. &ZIO; //DAMMI l'INDIRIZZO della var. ZIO
  31. *ZIO = 9;
  32. cout << *ZIO << " si trova in " << ZIO;
  33. //OUTPUT: "9 si trova in 0xDEADBEEF"
  34.  
  35. //******************************************************************************
  36. //NOTE VARIE:
  37. char carattere = 'a';
  38.  
  39. //3 modi per dichiararli
  40. char* ptr1a = &carattere; //OK!
  41. char *ptr1a = &carattere; //Non me gusta ma OK
  42. char * ptr1c = &carattere; //Orribile ma OK
  43.  
  44. char* ptr2; ptr2 = &carattere; //OK!
  45. *ptr2 = 'b' //OK! Perchè '*ptr == carattere' e 'ptr == &carattere'
  46.  
  47. char* ptr3 = carattere; //ERRORE. Fai piuttosto come ho fatto sù
  48.  
  49. ptr4 = carattere; //ERRORE. Ambo i casi su Win9x avresti fatto danno :>
  50.  
  51. //******************************************************************************
  52. /*
  53. PUNTATORI + FUNZIONI: PASS-BY-VALUE & PASS BY REFERENCE
  54. TL;DR: Vedi il mio esempio pass_by_reference() se vuoi modificare cose dichiarate nel main()
  55. */
  56.  
  57. void pass_by_value(int change_this){
  58.     //Copia 'vote' -> 'change_this'...
  59.     change_this = 9;
  60. }//...poi però 'change_this' e il '9' vengono distrutti!
  61.  
  62. void pass_by_reference(int* ptr){
  63.     //Copia '&vote' -> 'ptr' (ptr == &vote)
  64.     int new_vote = 9;
  65.     *ptr = new_vote; //accedo 'per referenza' e cambio 4 con 9
  66. }//ptr distrutta MA ora vote == 9!
  67.  
  68.  
  69. //INIZIO
  70. int main(){
  71.     int vote = 4; int* ptr;
  72.    
  73.     cout << "Il prof vuole darmi " << vote;
  74.     pass_by_value(vote); //NO FUNZIA.
  75.     cout << " ma io voglio che mi dia " << vote
  76.     << endl;
  77.    
  78.     //OUTPUT fin qua: "Il prof vuole darmi 4 ma io voglio che mi dia 4"
  79.     //???? WTF
  80.     //se invece facessi...
  81.    
  82.     cout << "Riprovo. Il prof vuole darmi " << vote;
  83.     pass_by_reference(&vote); //questo FUNZIA!
  84.     cout << " ma io voglio che mi dia " << vote
  85.     << endl;
  86.     //OUTPUT: "Il prof vuole darmi 4 ma io voglio che mi dia 9"
  87.     //Yay.
  88.     return 0;
  89. }
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement